You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2013/04/06 08:06:09 UTC

svn commit: r1465198 [28/41] - in /hbase/hbase.apache.org/trunk: ./ css/ hbase-assembly/ images/ xref-test/ xref-test/org/apache/hadoop/hbase/ xref-test/org/apache/hadoop/hbase/client/ xref-test/org/apache/hadoop/hbase/client/replication/ xref-test/org...

Modified: hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/regionserver/HRegion.html
URL: http://svn.apache.org/viewvc/hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/regionserver/HRegion.html?rev=1465198&r1=1465197&r2=1465198&view=diff
==============================================================================
--- hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/regionserver/HRegion.html (original)
+++ hbase/hbase.apache.org/trunk/xref/org/apache/hadoop/hbase/regionserver/HRegion.html Sat Apr  6 06:06:07 2013
@@ -3225,2254 +3225,2253 @@
 <a class="jxr_linenumber" name="3215" href="#3215">3215</a>           IOException ioe = <strong class="jxr_keyword">new</strong> org.apache.hadoop.hbase.exceptions.DoNotRetryIOException(
 <a class="jxr_linenumber" name="3216" href="#3216">3216</a>               <span class="jxr_string">"No such column family "</span> + Bytes.toStringBinary(familyName));
 <a class="jxr_linenumber" name="3217" href="#3217">3217</a>           ioes.add(ioe);
-<a class="jxr_linenumber" name="3218" href="#3218">3218</a>           failures.add(p);
-<a class="jxr_linenumber" name="3219" href="#3219">3219</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="3220" href="#3220">3220</a>           <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="3221" href="#3221">3221</a>             store.assertBulkLoadHFileOk(<strong class="jxr_keyword">new</strong> Path(path));
-<a class="jxr_linenumber" name="3222" href="#3222">3222</a>           } <strong class="jxr_keyword">catch</strong> (WrongRegionException wre) {
-<a class="jxr_linenumber" name="3223" href="#3223">3223</a>             <em class="jxr_comment">// recoverable (file doesn't fit in region)</em>
-<a class="jxr_linenumber" name="3224" href="#3224">3224</a>             failures.add(p);
-<a class="jxr_linenumber" name="3225" href="#3225">3225</a>           } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
-<a class="jxr_linenumber" name="3226" href="#3226">3226</a>             <em class="jxr_comment">// unrecoverable (hdfs problem)</em>
-<a class="jxr_linenumber" name="3227" href="#3227">3227</a>             ioes.add(ioe);
-<a class="jxr_linenumber" name="3228" href="#3228">3228</a>           }
-<a class="jxr_linenumber" name="3229" href="#3229">3229</a>         }
-<a class="jxr_linenumber" name="3230" href="#3230">3230</a>       }
-<a class="jxr_linenumber" name="3231" href="#3231">3231</a> 
-<a class="jxr_linenumber" name="3232" href="#3232">3232</a>       <em class="jxr_comment">// validation failed, bail out before doing anything permanent.</em>
-<a class="jxr_linenumber" name="3233" href="#3233">3233</a>       <strong class="jxr_keyword">if</strong> (failures.size() != 0) {
-<a class="jxr_linenumber" name="3234" href="#3234">3234</a>         StringBuilder list = <strong class="jxr_keyword">new</strong> StringBuilder();
-<a class="jxr_linenumber" name="3235" href="#3235">3235</a>         <strong class="jxr_keyword">for</strong> (Pair&lt;byte[], String&gt; p : failures) {
-<a class="jxr_linenumber" name="3236" href="#3236">3236</a>           list.append(<span class="jxr_string">"\n"</span>).append(Bytes.toString(p.getFirst())).append(<span class="jxr_string">" : "</span>)
-<a class="jxr_linenumber" name="3237" href="#3237">3237</a>             .append(p.getSecond());
-<a class="jxr_linenumber" name="3238" href="#3238">3238</a>         }
-<a class="jxr_linenumber" name="3239" href="#3239">3239</a>         <em class="jxr_comment">// problem when validating</em>
-<a class="jxr_linenumber" name="3240" href="#3240">3240</a>         LOG.warn(<span class="jxr_string">"There was a recoverable bulk load failure likely due to a"</span> +
-<a class="jxr_linenumber" name="3241" href="#3241">3241</a>             <span class="jxr_string">" split.  These (family, HFile) pairs were not loaded: "</span> + list);
-<a class="jxr_linenumber" name="3242" href="#3242">3242</a>         <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="3243" href="#3243">3243</a>       }
-<a class="jxr_linenumber" name="3244" href="#3244">3244</a> 
-<a class="jxr_linenumber" name="3245" href="#3245">3245</a>       <em class="jxr_comment">// validation failed because of some sort of IO problem.</em>
-<a class="jxr_linenumber" name="3246" href="#3246">3246</a>       <strong class="jxr_keyword">if</strong> (ioes.size() != 0) {
-<a class="jxr_linenumber" name="3247" href="#3247">3247</a>         IOException e = MultipleIOException.createIOException(ioes);
-<a class="jxr_linenumber" name="3248" href="#3248">3248</a>         LOG.error(<span class="jxr_string">"There were one or more IO errors when checking if the bulk load is ok."</span>, e);
-<a class="jxr_linenumber" name="3249" href="#3249">3249</a>         <strong class="jxr_keyword">throw</strong> e;
-<a class="jxr_linenumber" name="3250" href="#3250">3250</a>       }
-<a class="jxr_linenumber" name="3251" href="#3251">3251</a> 
-<a class="jxr_linenumber" name="3252" href="#3252">3252</a>       <strong class="jxr_keyword">for</strong> (Pair&lt;byte[], String&gt; p : familyPaths) {
-<a class="jxr_linenumber" name="3253" href="#3253">3253</a>         byte[] familyName = p.getFirst();
-<a class="jxr_linenumber" name="3254" href="#3254">3254</a>         String path = p.getSecond();
-<a class="jxr_linenumber" name="3255" href="#3255">3255</a>         <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store = getStore(familyName);
-<a class="jxr_linenumber" name="3256" href="#3256">3256</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="3257" href="#3257">3257</a>           String finalPath = path;
-<a class="jxr_linenumber" name="3258" href="#3258">3258</a>           <strong class="jxr_keyword">if</strong>(bulkLoadListener != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3259" href="#3259">3259</a>             finalPath = bulkLoadListener.prepareBulkLoad(familyName, path);
-<a class="jxr_linenumber" name="3260" href="#3260">3260</a>           }
-<a class="jxr_linenumber" name="3261" href="#3261">3261</a>           store.bulkLoadHFile(finalPath, assignSeqId ? <strong class="jxr_keyword">this</strong>.log.obtainSeqNum() : -1);
-<a class="jxr_linenumber" name="3262" href="#3262">3262</a>           <strong class="jxr_keyword">if</strong>(bulkLoadListener != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3263" href="#3263">3263</a>             bulkLoadListener.doneBulkLoad(familyName, path);
-<a class="jxr_linenumber" name="3264" href="#3264">3264</a>           }
-<a class="jxr_linenumber" name="3265" href="#3265">3265</a>         } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
-<a class="jxr_linenumber" name="3266" href="#3266">3266</a>           <em class="jxr_comment">// A failure here can cause an atomicity violation that we currently</em>
-<a class="jxr_linenumber" name="3267" href="#3267">3267</a>           <em class="jxr_comment">// cannot recover from since it is likely a failed HDFS operation.</em>
-<a class="jxr_linenumber" name="3268" href="#3268">3268</a> 
-<a class="jxr_linenumber" name="3269" href="#3269">3269</a>           <em class="jxr_comment">// TODO Need a better story for reverting partial failures due to HDFS.</em>
-<a class="jxr_linenumber" name="3270" href="#3270">3270</a>           LOG.error(<span class="jxr_string">"There was a partial failure due to IO when attempting to"</span> +
-<a class="jxr_linenumber" name="3271" href="#3271">3271</a>               <span class="jxr_string">" load "</span> + Bytes.toString(p.getFirst()) + <span class="jxr_string">" : "</span>+ p.getSecond(), ioe);
-<a class="jxr_linenumber" name="3272" href="#3272">3272</a>           <strong class="jxr_keyword">if</strong>(bulkLoadListener != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3273" href="#3273">3273</a>             <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="3274" href="#3274">3274</a>               bulkLoadListener.failedBulkLoad(familyName, path);
-<a class="jxr_linenumber" name="3275" href="#3275">3275</a>             } <strong class="jxr_keyword">catch</strong> (Exception ex) {
-<a class="jxr_linenumber" name="3276" href="#3276">3276</a>               LOG.error(<span class="jxr_string">"Error while calling failedBulkLoad for family "</span>+
-<a class="jxr_linenumber" name="3277" href="#3277">3277</a>                   Bytes.toString(familyName)+<span class="jxr_string">" with path "</span>+path, ex);
-<a class="jxr_linenumber" name="3278" href="#3278">3278</a>             }
-<a class="jxr_linenumber" name="3279" href="#3279">3279</a>           }
-<a class="jxr_linenumber" name="3280" href="#3280">3280</a>           <strong class="jxr_keyword">throw</strong> ioe;
-<a class="jxr_linenumber" name="3281" href="#3281">3281</a>         }
-<a class="jxr_linenumber" name="3282" href="#3282">3282</a>       }
-<a class="jxr_linenumber" name="3283" href="#3283">3283</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="3284" href="#3284">3284</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="3285" href="#3285">3285</a>       closeBulkRegionOperation();
-<a class="jxr_linenumber" name="3286" href="#3286">3286</a>     }
-<a class="jxr_linenumber" name="3287" href="#3287">3287</a>   }
-<a class="jxr_linenumber" name="3288" href="#3288">3288</a> 
-<a class="jxr_linenumber" name="3289" href="#3289">3289</a>   @Override
-<a class="jxr_linenumber" name="3290" href="#3290">3290</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(Object o) {
-<a class="jxr_linenumber" name="3291" href="#3291">3291</a>     <strong class="jxr_keyword">if</strong> (!(o instanceof HRegion)) {
-<a class="jxr_linenumber" name="3292" href="#3292">3292</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="3293" href="#3293">3293</a>     }
-<a class="jxr_linenumber" name="3294" href="#3294">3294</a>     <strong class="jxr_keyword">return</strong> Bytes.equals(<strong class="jxr_keyword">this</strong>.getRegionName(), ((HRegion) o).getRegionName());
-<a class="jxr_linenumber" name="3295" href="#3295">3295</a>   }
-<a class="jxr_linenumber" name="3296" href="#3296">3296</a> 
-<a class="jxr_linenumber" name="3297" href="#3297">3297</a>   @Override
-<a class="jxr_linenumber" name="3298" href="#3298">3298</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
-<a class="jxr_linenumber" name="3299" href="#3299">3299</a>     <strong class="jxr_keyword">return</strong> Bytes.hashCode(<strong class="jxr_keyword">this</strong>.getRegionName());
-<a class="jxr_linenumber" name="3300" href="#3300">3300</a>   }
-<a class="jxr_linenumber" name="3301" href="#3301">3301</a> 
-<a class="jxr_linenumber" name="3302" href="#3302">3302</a>   @Override
-<a class="jxr_linenumber" name="3303" href="#3303">3303</a>   <strong class="jxr_keyword">public</strong> String toString() {
-<a class="jxr_linenumber" name="3304" href="#3304">3304</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getRegionNameAsString();
-<a class="jxr_linenumber" name="3305" href="#3305">3305</a>   }
-<a class="jxr_linenumber" name="3306" href="#3306">3306</a> 
-<a class="jxr_linenumber" name="3307" href="#3307">3307</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3308" href="#3308">3308</a> <em class="jxr_javadoccomment">   * RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).</em>
-<a class="jxr_linenumber" name="3309" href="#3309">3309</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="3310" href="#3310">3310</a>   <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">RegionScannerImpl</a> <strong class="jxr_keyword">implements</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html">RegionScanner</a> {
-<a class="jxr_linenumber" name="3311" href="#3311">3311</a>     <em class="jxr_comment">// Package local for testability</em>
-<a class="jxr_linenumber" name="3312" href="#3312">3312</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html">KeyValueHeap</a> storeHeap = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3313" href="#3313">3313</a>     <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Heap of key-values that are not essential for the provided filters and are thus read</em>
-<a class="jxr_linenumber" name="3314" href="#3314">3314</a> <em class="jxr_javadoccomment">     * on demand, if on-demand column family loading is enabled.*/</em>
-<a class="jxr_linenumber" name="3315" href="#3315">3315</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html">KeyValueHeap</a> joinedHeap = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3316" href="#3316">3316</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3317" href="#3317">3317</a> <em class="jxr_javadoccomment">     * If the joined heap data gathering is interrupted due to scan limits, this will</em>
-<a class="jxr_linenumber" name="3318" href="#3318">3318</a> <em class="jxr_javadoccomment">     * contain the row for which we are populating the values.*/</em>
-<a class="jxr_linenumber" name="3319" href="#3319">3319</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> joinedContinuationRow = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3320" href="#3320">3320</a>     <em class="jxr_comment">// KeyValue indicating that limit is reached when scanning</em>
-<a class="jxr_linenumber" name="3321" href="#3321">3321</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> KV_LIMIT = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a>();
-<a class="jxr_linenumber" name="3322" href="#3322">3322</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> byte [] stopRow;
-<a class="jxr_linenumber" name="3323" href="#3323">3323</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html">Filter</a> filter;
-<a class="jxr_linenumber" name="3324" href="#3324">3324</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> batch;
-<a class="jxr_linenumber" name="3325" href="#3325">3325</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> isScan;
-<a class="jxr_linenumber" name="3326" href="#3326">3326</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> filterClosed = false;
-<a class="jxr_linenumber" name="3327" href="#3327">3327</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> readPt;
-<a class="jxr_linenumber" name="3328" href="#3328">3328</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> maxResultSize;
-<a class="jxr_linenumber" name="3329" href="#3329">3329</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">HRegion</a> region;
-<a class="jxr_linenumber" name="3330" href="#3330">3330</a> 
-<a class="jxr_linenumber" name="3331" href="#3331">3331</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> getRegionInfo() {
-<a class="jxr_linenumber" name="3332" href="#3332">3332</a>       <strong class="jxr_keyword">return</strong> region.getRegionInfo();
-<a class="jxr_linenumber" name="3333" href="#3333">3333</a>     }
-<a class="jxr_linenumber" name="3334" href="#3334">3334</a> 
-<a class="jxr_linenumber" name="3335" href="#3335">3335</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">RegionScannerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, List&lt;KeyValueScanner&gt; additionalScanners, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">HRegion</a> region)
-<a class="jxr_linenumber" name="3336" href="#3336">3336</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3337" href="#3337">3337</a>       <em class="jxr_comment">// DebugPrint.println("HRegionScanner.&lt;init&gt;");</em>
-<a class="jxr_linenumber" name="3338" href="#3338">3338</a>       <strong class="jxr_keyword">this</strong>.region = region;
-<a class="jxr_linenumber" name="3339" href="#3339">3339</a>       <strong class="jxr_keyword">this</strong>.maxResultSize = scan.getMaxResultSize();
-<a class="jxr_linenumber" name="3340" href="#3340">3340</a>       <strong class="jxr_keyword">if</strong> (scan.hasFilter()) {
-<a class="jxr_linenumber" name="3341" href="#3341">3341</a>         <strong class="jxr_keyword">this</strong>.filter = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.html">FilterWrapper</a>(scan.getFilter());
-<a class="jxr_linenumber" name="3342" href="#3342">3342</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="3343" href="#3343">3343</a>         <strong class="jxr_keyword">this</strong>.filter = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3344" href="#3344">3344</a>       }
-<a class="jxr_linenumber" name="3345" href="#3345">3345</a> 
-<a class="jxr_linenumber" name="3346" href="#3346">3346</a>       <strong class="jxr_keyword">this</strong>.batch = scan.getBatch();
-<a class="jxr_linenumber" name="3347" href="#3347">3347</a>       <strong class="jxr_keyword">if</strong> (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) &amp;&amp; !scan.isGetScan()) {
-<a class="jxr_linenumber" name="3348" href="#3348">3348</a>         <strong class="jxr_keyword">this</strong>.stopRow = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3349" href="#3349">3349</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="3350" href="#3350">3350</a>         <strong class="jxr_keyword">this</strong>.stopRow = scan.getStopRow();
-<a class="jxr_linenumber" name="3351" href="#3351">3351</a>       }
-<a class="jxr_linenumber" name="3352" href="#3352">3352</a>       <em class="jxr_comment">// If we are doing a get, we want to be [startRow,endRow] normally</em>
-<a class="jxr_linenumber" name="3353" href="#3353">3353</a>       <em class="jxr_comment">// it is [startRow,endRow) and if startRow=endRow we get nothing.</em>
-<a class="jxr_linenumber" name="3354" href="#3354">3354</a>       <strong class="jxr_keyword">this</strong>.isScan = scan.isGetScan() ? -1 : 0;
-<a class="jxr_linenumber" name="3355" href="#3355">3355</a> 
-<a class="jxr_linenumber" name="3356" href="#3356">3356</a>       <em class="jxr_comment">// synchronize on scannerReadPoints so that nobody calculates</em>
-<a class="jxr_linenumber" name="3357" href="#3357">3357</a>       <em class="jxr_comment">// getSmallestReadPoint, before scannerReadPoints is updated.</em>
-<a class="jxr_linenumber" name="3358" href="#3358">3358</a>       <a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html">IsolationLevel</a> isolationLevel = scan.getIsolationLevel();
-<a class="jxr_linenumber" name="3359" href="#3359">3359</a>       <strong class="jxr_keyword">synchronized</strong>(scannerReadPoints) {
-<a class="jxr_linenumber" name="3360" href="#3360">3360</a>         <strong class="jxr_keyword">if</strong> (isolationLevel == IsolationLevel.READ_UNCOMMITTED) {
-<a class="jxr_linenumber" name="3361" href="#3361">3361</a>           <em class="jxr_comment">// This scan can read even uncommitted transactions</em>
-<a class="jxr_linenumber" name="3362" href="#3362">3362</a>           <strong class="jxr_keyword">this</strong>.readPt = Long.MAX_VALUE;
-<a class="jxr_linenumber" name="3363" href="#3363">3363</a>           MultiVersionConsistencyControl.setThreadReadPoint(<strong class="jxr_keyword">this</strong>.readPt);
-<a class="jxr_linenumber" name="3364" href="#3364">3364</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="3365" href="#3365">3365</a>           <strong class="jxr_keyword">this</strong>.readPt = MultiVersionConsistencyControl.resetThreadReadPoint(mvcc);
-<a class="jxr_linenumber" name="3366" href="#3366">3366</a>         }
-<a class="jxr_linenumber" name="3367" href="#3367">3367</a>         scannerReadPoints.put(<strong class="jxr_keyword">this</strong>, <strong class="jxr_keyword">this</strong>.readPt);
-<a class="jxr_linenumber" name="3368" href="#3368">3368</a>       }
-<a class="jxr_linenumber" name="3369" href="#3369">3369</a> 
-<a class="jxr_linenumber" name="3370" href="#3370">3370</a>       <em class="jxr_comment">// Here we separate all scanners into two lists - scanner that provide data required</em>
-<a class="jxr_linenumber" name="3371" href="#3371">3371</a>       <em class="jxr_comment">// by the filter to operate (scanners list) and all others (joinedScanners list).</em>
-<a class="jxr_linenumber" name="3372" href="#3372">3372</a>       List&lt;KeyValueScanner&gt; scanners = <strong class="jxr_keyword">new</strong> ArrayList&lt;KeyValueScanner&gt;();
-<a class="jxr_linenumber" name="3373" href="#3373">3373</a>       List&lt;KeyValueScanner&gt; joinedScanners = <strong class="jxr_keyword">new</strong> ArrayList&lt;KeyValueScanner&gt;();
-<a class="jxr_linenumber" name="3374" href="#3374">3374</a>       <strong class="jxr_keyword">if</strong> (additionalScanners != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3375" href="#3375">3375</a>         scanners.addAll(additionalScanners);
-<a class="jxr_linenumber" name="3376" href="#3376">3376</a>       }
-<a class="jxr_linenumber" name="3377" href="#3377">3377</a> 
-<a class="jxr_linenumber" name="3378" href="#3378">3378</a>       <strong class="jxr_keyword">for</strong> (Map.Entry&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; entry :
-<a class="jxr_linenumber" name="3379" href="#3379">3379</a>           scan.getFamilyMap().entrySet()) {
-<a class="jxr_linenumber" name="3380" href="#3380">3380</a>         <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store = stores.get(entry.getKey());
-<a class="jxr_linenumber" name="3381" href="#3381">3381</a>         <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html">KeyValueScanner</a> scanner = store.getScanner(scan, entry.getValue());
-<a class="jxr_linenumber" name="3382" href="#3382">3382</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.filter == <strong class="jxr_keyword">null</strong> || !scan.doLoadColumnFamiliesOnDemand()
-<a class="jxr_linenumber" name="3383" href="#3383">3383</a>           || <strong class="jxr_keyword">this</strong>.filter.isFamilyEssential(entry.getKey())) {
-<a class="jxr_linenumber" name="3384" href="#3384">3384</a>           scanners.add(scanner);
-<a class="jxr_linenumber" name="3385" href="#3385">3385</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="3386" href="#3386">3386</a>           joinedScanners.add(scanner);
-<a class="jxr_linenumber" name="3387" href="#3387">3387</a>         }
-<a class="jxr_linenumber" name="3388" href="#3388">3388</a>       }
-<a class="jxr_linenumber" name="3389" href="#3389">3389</a>       <strong class="jxr_keyword">this</strong>.storeHeap = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html">KeyValueHeap</a>(scanners, comparator);
-<a class="jxr_linenumber" name="3390" href="#3390">3390</a>       <strong class="jxr_keyword">if</strong> (!joinedScanners.isEmpty()) {
-<a class="jxr_linenumber" name="3391" href="#3391">3391</a>         <strong class="jxr_keyword">this</strong>.joinedHeap = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html">KeyValueHeap</a>(joinedScanners, comparator);
-<a class="jxr_linenumber" name="3392" href="#3392">3392</a>       }
-<a class="jxr_linenumber" name="3393" href="#3393">3393</a>     }
-<a class="jxr_linenumber" name="3394" href="#3394">3394</a> 
-<a class="jxr_linenumber" name="3395" href="#3395">3395</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">RegionScannerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">HRegion</a> region) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3396" href="#3396">3396</a>       <strong class="jxr_keyword">this</strong>(scan, <strong class="jxr_keyword">null</strong>, region);
-<a class="jxr_linenumber" name="3397" href="#3397">3397</a>     }
-<a class="jxr_linenumber" name="3398" href="#3398">3398</a> 
-<a class="jxr_linenumber" name="3399" href="#3399">3399</a>     @Override
-<a class="jxr_linenumber" name="3400" href="#3400">3400</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getMaxResultSize() {
-<a class="jxr_linenumber" name="3401" href="#3401">3401</a>       <strong class="jxr_keyword">return</strong> maxResultSize;
-<a class="jxr_linenumber" name="3402" href="#3402">3402</a>     }
-<a class="jxr_linenumber" name="3403" href="#3403">3403</a> 
-<a class="jxr_linenumber" name="3404" href="#3404">3404</a>     @Override
-<a class="jxr_linenumber" name="3405" href="#3405">3405</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getMvccReadPoint() {
-<a class="jxr_linenumber" name="3406" href="#3406">3406</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.readPt;
-<a class="jxr_linenumber" name="3407" href="#3407">3407</a>     }
-<a class="jxr_linenumber" name="3408" href="#3408">3408</a>     
-<a class="jxr_linenumber" name="3409" href="#3409">3409</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3410" href="#3410">3410</a> <em class="jxr_javadoccomment">     * Reset both the filter and the old filter.</em>
-<a class="jxr_linenumber" name="3411" href="#3411">3411</a> <em class="jxr_javadoccomment">     * </em>
-<a class="jxr_linenumber" name="3412" href="#3412">3412</a> <em class="jxr_javadoccomment">     * @throws IOException in case a filter raises an I/O exception.</em>
-<a class="jxr_linenumber" name="3413" href="#3413">3413</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="3414" href="#3414">3414</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> resetFilters() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3415" href="#3415">3415</a>       <strong class="jxr_keyword">if</strong> (filter != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3416" href="#3416">3416</a>         filter.reset();
-<a class="jxr_linenumber" name="3417" href="#3417">3417</a>       }
-<a class="jxr_linenumber" name="3418" href="#3418">3418</a>     }
-<a class="jxr_linenumber" name="3419" href="#3419">3419</a> 
-<a class="jxr_linenumber" name="3420" href="#3420">3420</a>     @Override
-<a class="jxr_linenumber" name="3421" href="#3421">3421</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> next(List&lt;KeyValue&gt; outResults, <strong class="jxr_keyword">int</strong> limit)
-<a class="jxr_linenumber" name="3422" href="#3422">3422</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3423" href="#3423">3423</a>       <strong class="jxr_keyword">return</strong> next(outResults, limit, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="3424" href="#3424">3424</a>     }
-<a class="jxr_linenumber" name="3425" href="#3425">3425</a> 
-<a class="jxr_linenumber" name="3426" href="#3426">3426</a>     @Override
-<a class="jxr_linenumber" name="3427" href="#3427">3427</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">boolean</strong> next(List&lt;KeyValue&gt; outResults, <strong class="jxr_keyword">int</strong> limit,
-<a class="jxr_linenumber" name="3428" href="#3428">3428</a>         String metric) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3429" href="#3429">3429</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.filterClosed) {
-<a class="jxr_linenumber" name="3430" href="#3430">3430</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/exceptions/UnknownScannerException.html">UnknownScannerException</a>(<span class="jxr_string">"Scanner was closed (timed out?) "</span> +
-<a class="jxr_linenumber" name="3431" href="#3431">3431</a>             <span class="jxr_string">"after we renewed it. Could be caused by a very slow scanner "</span> +
-<a class="jxr_linenumber" name="3432" href="#3432">3432</a>             <span class="jxr_string">"or a lengthy garbage collection"</span>);
-<a class="jxr_linenumber" name="3433" href="#3433">3433</a>       }
-<a class="jxr_linenumber" name="3434" href="#3434">3434</a>       startRegionOperation();
-<a class="jxr_linenumber" name="3435" href="#3435">3435</a>       readRequestsCount.increment();
-<a class="jxr_linenumber" name="3436" href="#3436">3436</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="3437" href="#3437">3437</a> 
-<a class="jxr_linenumber" name="3438" href="#3438">3438</a>         <em class="jxr_comment">// This could be a new thread from the last time we called next().</em>
-<a class="jxr_linenumber" name="3439" href="#3439">3439</a>         MultiVersionConsistencyControl.setThreadReadPoint(<strong class="jxr_keyword">this</strong>.readPt);
-<a class="jxr_linenumber" name="3440" href="#3440">3440</a> 
-<a class="jxr_linenumber" name="3441" href="#3441">3441</a>         <strong class="jxr_keyword">return</strong> nextRaw(outResults, limit, metric);
-<a class="jxr_linenumber" name="3442" href="#3442">3442</a>       } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="3443" href="#3443">3443</a>         closeRegionOperation();
-<a class="jxr_linenumber" name="3444" href="#3444">3444</a>       }
-<a class="jxr_linenumber" name="3445" href="#3445">3445</a>     }
-<a class="jxr_linenumber" name="3446" href="#3446">3446</a> 
-<a class="jxr_linenumber" name="3447" href="#3447">3447</a>     @Override
-<a class="jxr_linenumber" name="3448" href="#3448">3448</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> nextRaw(List&lt;KeyValue&gt; outResults)
-<a class="jxr_linenumber" name="3449" href="#3449">3449</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3450" href="#3450">3450</a>       <strong class="jxr_keyword">return</strong> nextRaw(outResults, batch, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="3451" href="#3451">3451</a>     }
-<a class="jxr_linenumber" name="3452" href="#3452">3452</a> 
-<a class="jxr_linenumber" name="3453" href="#3453">3453</a>     @Override
-<a class="jxr_linenumber" name="3454" href="#3454">3454</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> nextRaw(List&lt;KeyValue&gt; outResults, <strong class="jxr_keyword">int</strong> limit,
-<a class="jxr_linenumber" name="3455" href="#3455">3455</a>         String metric) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3456" href="#3456">3456</a>       <strong class="jxr_keyword">boolean</strong> returnResult;
-<a class="jxr_linenumber" name="3457" href="#3457">3457</a>       <strong class="jxr_keyword">if</strong> (outResults.isEmpty()) {
-<a class="jxr_linenumber" name="3458" href="#3458">3458</a>         <em class="jxr_comment">// Usually outResults is empty. This is true when next is called</em>
-<a class="jxr_linenumber" name="3459" href="#3459">3459</a>         <em class="jxr_comment">// to handle scan or get operation.</em>
-<a class="jxr_linenumber" name="3460" href="#3460">3460</a>         returnResult = nextInternal(outResults, limit, metric);
-<a class="jxr_linenumber" name="3461" href="#3461">3461</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="3462" href="#3462">3462</a>         List&lt;KeyValue&gt; tmpList = <strong class="jxr_keyword">new</strong> ArrayList&lt;KeyValue&gt;();
-<a class="jxr_linenumber" name="3463" href="#3463">3463</a>         returnResult = nextInternal(tmpList, limit, metric);
-<a class="jxr_linenumber" name="3464" href="#3464">3464</a>         outResults.addAll(tmpList);
-<a class="jxr_linenumber" name="3465" href="#3465">3465</a>       }
-<a class="jxr_linenumber" name="3466" href="#3466">3466</a>       resetFilters();
-<a class="jxr_linenumber" name="3467" href="#3467">3467</a>       <strong class="jxr_keyword">if</strong> (isFilterDone()) {
-<a class="jxr_linenumber" name="3468" href="#3468">3468</a>         <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="3469" href="#3469">3469</a>       }
-<a class="jxr_linenumber" name="3470" href="#3470">3470</a>       <strong class="jxr_keyword">return</strong> returnResult;
-<a class="jxr_linenumber" name="3471" href="#3471">3471</a>     }
-<a class="jxr_linenumber" name="3472" href="#3472">3472</a> 
-<a class="jxr_linenumber" name="3473" href="#3473">3473</a>     @Override
-<a class="jxr_linenumber" name="3474" href="#3474">3474</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> next(List&lt;KeyValue&gt; outResults)
-<a class="jxr_linenumber" name="3475" href="#3475">3475</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3476" href="#3476">3476</a>       <em class="jxr_comment">// apply the batching limit by default</em>
-<a class="jxr_linenumber" name="3477" href="#3477">3477</a>       <strong class="jxr_keyword">return</strong> next(outResults, batch, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="3478" href="#3478">3478</a>     }
-<a class="jxr_linenumber" name="3479" href="#3479">3479</a> 
-<a class="jxr_linenumber" name="3480" href="#3480">3480</a>     @Override
-<a class="jxr_linenumber" name="3481" href="#3481">3481</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> next(List&lt;KeyValue&gt; outResults, String metric)
-<a class="jxr_linenumber" name="3482" href="#3482">3482</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3483" href="#3483">3483</a>       <em class="jxr_comment">// apply the batching limit by default</em>
-<a class="jxr_linenumber" name="3484" href="#3484">3484</a>       <strong class="jxr_keyword">return</strong> next(outResults, batch, metric);
-<a class="jxr_linenumber" name="3485" href="#3485">3485</a>     }
-<a class="jxr_linenumber" name="3486" href="#3486">3486</a> 
-<a class="jxr_linenumber" name="3487" href="#3487">3487</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> populateFromJoinedHeap(List&lt;KeyValue&gt; results, <strong class="jxr_keyword">int</strong> limit, String metric)
-<a class="jxr_linenumber" name="3488" href="#3488">3488</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3489" href="#3489">3489</a>       assert joinedContinuationRow != <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3490" href="#3490">3490</a>       <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> kv = populateResult(results, <strong class="jxr_keyword">this</strong>.joinedHeap, limit,
-<a class="jxr_linenumber" name="3491" href="#3491">3491</a>           joinedContinuationRow.getBuffer(), joinedContinuationRow.getRowOffset(),
-<a class="jxr_linenumber" name="3492" href="#3492">3492</a>           joinedContinuationRow.getRowLength(), metric);
-<a class="jxr_linenumber" name="3493" href="#3493">3493</a>       <strong class="jxr_keyword">if</strong> (kv != KV_LIMIT) {
-<a class="jxr_linenumber" name="3494" href="#3494">3494</a>         <em class="jxr_comment">// We are done with this row, reset the continuation.</em>
-<a class="jxr_linenumber" name="3495" href="#3495">3495</a>         joinedContinuationRow = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3496" href="#3496">3496</a>       }
-<a class="jxr_linenumber" name="3497" href="#3497">3497</a>       <em class="jxr_comment">// As the data is obtained from two independent heaps, we need to</em>
-<a class="jxr_linenumber" name="3498" href="#3498">3498</a>       <em class="jxr_comment">// ensure that result list is sorted, because Result relies on that.</em>
-<a class="jxr_linenumber" name="3499" href="#3499">3499</a>       Collections.sort(results, comparator);
-<a class="jxr_linenumber" name="3500" href="#3500">3500</a>     }
-<a class="jxr_linenumber" name="3501" href="#3501">3501</a> 
-<a class="jxr_linenumber" name="3502" href="#3502">3502</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3503" href="#3503">3503</a> <em class="jxr_javadoccomment">     * Fetches records with currentRow into results list, until next row or limit (if not -1).</em>
-<a class="jxr_linenumber" name="3504" href="#3504">3504</a> <em class="jxr_javadoccomment">     * @param results</em>
-<a class="jxr_linenumber" name="3505" href="#3505">3505</a> <em class="jxr_javadoccomment">     * @param heap KeyValueHeap to fetch data from.It must be positioned on correct row before call.</em>
-<a class="jxr_linenumber" name="3506" href="#3506">3506</a> <em class="jxr_javadoccomment">     * @param limit Max amount of KVs to place in result list, -1 means no limit.</em>
-<a class="jxr_linenumber" name="3507" href="#3507">3507</a> <em class="jxr_javadoccomment">     * @param currentRow Byte array with key we are fetching.</em>
-<a class="jxr_linenumber" name="3508" href="#3508">3508</a> <em class="jxr_javadoccomment">     * @param offset offset for currentRow</em>
-<a class="jxr_linenumber" name="3509" href="#3509">3509</a> <em class="jxr_javadoccomment">     * @param length length for currentRow</em>
-<a class="jxr_linenumber" name="3510" href="#3510">3510</a> <em class="jxr_javadoccomment">     * @param metric Metric key to be passed into KeyValueHeap::next().</em>
-<a class="jxr_linenumber" name="3511" href="#3511">3511</a> <em class="jxr_javadoccomment">     * @return KV_LIMIT if limit reached, next KeyValue otherwise.</em>
-<a class="jxr_linenumber" name="3512" href="#3512">3512</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="3513" href="#3513">3513</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> populateResult(List&lt;KeyValue&gt; results, <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html">KeyValueHeap</a> heap, <strong class="jxr_keyword">int</strong> limit,
-<a class="jxr_linenumber" name="3514" href="#3514">3514</a>         byte[] currentRow, <strong class="jxr_keyword">int</strong> offset, <strong class="jxr_keyword">short</strong> length, String metric) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3515" href="#3515">3515</a>       <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> nextKv;
-<a class="jxr_linenumber" name="3516" href="#3516">3516</a>       <strong class="jxr_keyword">do</strong> {
-<a class="jxr_linenumber" name="3517" href="#3517">3517</a>         heap.next(results, limit - results.size(), metric);
-<a class="jxr_linenumber" name="3518" href="#3518">3518</a>         <strong class="jxr_keyword">if</strong> (limit &gt; 0 &amp;&amp; results.size() == limit) {
-<a class="jxr_linenumber" name="3519" href="#3519">3519</a>           <strong class="jxr_keyword">return</strong> KV_LIMIT;
-<a class="jxr_linenumber" name="3520" href="#3520">3520</a>         }
-<a class="jxr_linenumber" name="3521" href="#3521">3521</a>         nextKv = heap.peek();
-<a class="jxr_linenumber" name="3522" href="#3522">3522</a>       } <strong class="jxr_keyword">while</strong> (nextKv != <strong class="jxr_keyword">null</strong> &amp;&amp; nextKv.matchingRow(currentRow, offset, length));
-<a class="jxr_linenumber" name="3523" href="#3523">3523</a> 
-<a class="jxr_linenumber" name="3524" href="#3524">3524</a>       <strong class="jxr_keyword">return</strong> nextKv;
-<a class="jxr_linenumber" name="3525" href="#3525">3525</a>     }
-<a class="jxr_linenumber" name="3526" href="#3526">3526</a> 
-<a class="jxr_linenumber" name="3527" href="#3527">3527</a>     <em class="jxr_comment">/*</em>
-<a class="jxr_linenumber" name="3528" href="#3528">3528</a> <em class="jxr_comment">     * @return True if a filter rules the scanner is over, done.</em>
-<a class="jxr_linenumber" name="3529" href="#3529">3529</a> <em class="jxr_comment">     */</em>
-<a class="jxr_linenumber" name="3530" href="#3530">3530</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">boolean</strong> isFilterDone() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3531" href="#3531">3531</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.filter != <strong class="jxr_keyword">null</strong> &amp;&amp; <strong class="jxr_keyword">this</strong>.filter.filterAllRemaining();
-<a class="jxr_linenumber" name="3532" href="#3532">3532</a>     }
-<a class="jxr_linenumber" name="3533" href="#3533">3533</a> 
-<a class="jxr_linenumber" name="3534" href="#3534">3534</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> nextInternal(List&lt;KeyValue&gt; results, <strong class="jxr_keyword">int</strong> limit, String metric)
-<a class="jxr_linenumber" name="3535" href="#3535">3535</a>     <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3536" href="#3536">3536</a>       <strong class="jxr_keyword">if</strong> (!results.isEmpty()) {
-<a class="jxr_linenumber" name="3537" href="#3537">3537</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"First parameter should be an empty list"</span>);
-<a class="jxr_linenumber" name="3538" href="#3538">3538</a>       }
-<a class="jxr_linenumber" name="3539" href="#3539">3539</a>       <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html">RpcCallContext</a> rpcCall = HBaseServer.getCurrentCall();
-<a class="jxr_linenumber" name="3540" href="#3540">3540</a>       <em class="jxr_comment">// The loop here is used only when at some point during the next we determine</em>
-<a class="jxr_linenumber" name="3541" href="#3541">3541</a>       <em class="jxr_comment">// that due to effects of filters or otherwise, we have an empty row in the result.</em>
-<a class="jxr_linenumber" name="3542" href="#3542">3542</a>       <em class="jxr_comment">// Then we loop and try again. Otherwise, we must get out on the first iteration via return,</em>
-<a class="jxr_linenumber" name="3543" href="#3543">3543</a>       <em class="jxr_comment">// "true" if there's more data to read, "false" if there isn't (storeHeap is at a stop row,</em>
-<a class="jxr_linenumber" name="3544" href="#3544">3544</a>       <em class="jxr_comment">// and joinedHeap has no more data to read for the last row (if set, joinedContinuationRow).</em>
-<a class="jxr_linenumber" name="3545" href="#3545">3545</a>       <strong class="jxr_keyword">while</strong> (<strong class="jxr_keyword">true</strong>) {
-<a class="jxr_linenumber" name="3546" href="#3546">3546</a>         <strong class="jxr_keyword">if</strong> (rpcCall != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3547" href="#3547">3547</a>           <em class="jxr_comment">// If a user specifies a too-restrictive or too-slow scanner, the</em>
-<a class="jxr_linenumber" name="3548" href="#3548">3548</a>           <em class="jxr_comment">// client might time out and disconnect while the server side</em>
-<a class="jxr_linenumber" name="3549" href="#3549">3549</a>           <em class="jxr_comment">// is still processing the request. We should abort aggressively</em>
-<a class="jxr_linenumber" name="3550" href="#3550">3550</a>           <em class="jxr_comment">// in that case.</em>
-<a class="jxr_linenumber" name="3551" href="#3551">3551</a>           rpcCall.throwExceptionIfCallerDisconnected();
-<a class="jxr_linenumber" name="3552" href="#3552">3552</a>         }
-<a class="jxr_linenumber" name="3553" href="#3553">3553</a> 
-<a class="jxr_linenumber" name="3554" href="#3554">3554</a>         <em class="jxr_comment">// Let's see what we have in the storeHeap.</em>
-<a class="jxr_linenumber" name="3555" href="#3555">3555</a>         <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> current = <strong class="jxr_keyword">this</strong>.storeHeap.peek();
-<a class="jxr_linenumber" name="3556" href="#3556">3556</a> 
-<a class="jxr_linenumber" name="3557" href="#3557">3557</a>         byte[] currentRow = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3558" href="#3558">3558</a>         <strong class="jxr_keyword">int</strong> offset = 0;
-<a class="jxr_linenumber" name="3559" href="#3559">3559</a>         <strong class="jxr_keyword">short</strong> length = 0;
-<a class="jxr_linenumber" name="3560" href="#3560">3560</a>         <strong class="jxr_keyword">if</strong> (current != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3561" href="#3561">3561</a>           currentRow = current.getBuffer();
-<a class="jxr_linenumber" name="3562" href="#3562">3562</a>           offset = current.getRowOffset();
-<a class="jxr_linenumber" name="3563" href="#3563">3563</a>           length = current.getRowLength();
-<a class="jxr_linenumber" name="3564" href="#3564">3564</a>         }
-<a class="jxr_linenumber" name="3565" href="#3565">3565</a>         <strong class="jxr_keyword">boolean</strong> stopRow = isStopRow(currentRow, offset, length);
-<a class="jxr_linenumber" name="3566" href="#3566">3566</a>         <em class="jxr_comment">// Check if we were getting data from the joinedHeap and hit the limit.</em>
-<a class="jxr_linenumber" name="3567" href="#3567">3567</a>         <em class="jxr_comment">// If not, then it's main path - getting results from storeHeap.</em>
-<a class="jxr_linenumber" name="3568" href="#3568">3568</a>         <strong class="jxr_keyword">if</strong> (joinedContinuationRow == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3569" href="#3569">3569</a>           <em class="jxr_comment">// First, check if we are at a stop row. If so, there are no more results.</em>
-<a class="jxr_linenumber" name="3570" href="#3570">3570</a>           <strong class="jxr_keyword">if</strong> (stopRow) {
-<a class="jxr_linenumber" name="3571" href="#3571">3571</a>             <strong class="jxr_keyword">if</strong> (filter != <strong class="jxr_keyword">null</strong> &amp;&amp; filter.hasFilterRow()) {
-<a class="jxr_linenumber" name="3572" href="#3572">3572</a>               filter.filterRow(results);
-<a class="jxr_linenumber" name="3573" href="#3573">3573</a>             }
-<a class="jxr_linenumber" name="3574" href="#3574">3574</a>             <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="3575" href="#3575">3575</a>           }
-<a class="jxr_linenumber" name="3576" href="#3576">3576</a> 
-<a class="jxr_linenumber" name="3577" href="#3577">3577</a>           <em class="jxr_comment">// Check if rowkey filter wants to exclude this row. If so, loop to next.</em>
-<a class="jxr_linenumber" name="3578" href="#3578">3578</a>           <em class="jxr_comment">// Technically, if we hit limits before on this row, we don't need this call.</em>
-<a class="jxr_linenumber" name="3579" href="#3579">3579</a>           <strong class="jxr_keyword">if</strong> (filterRowKey(currentRow, offset, length)) {
-<a class="jxr_linenumber" name="3580" href="#3580">3580</a>             <strong class="jxr_keyword">boolean</strong> moreRows = nextRow(currentRow, offset, length);
-<a class="jxr_linenumber" name="3581" href="#3581">3581</a>             <strong class="jxr_keyword">if</strong> (!moreRows) <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="3582" href="#3582">3582</a>             results.clear();
-<a class="jxr_linenumber" name="3583" href="#3583">3583</a>             <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="3584" href="#3584">3584</a>           }
-<a class="jxr_linenumber" name="3585" href="#3585">3585</a> 
-<a class="jxr_linenumber" name="3586" href="#3586">3586</a>           <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> nextKv = populateResult(results, <strong class="jxr_keyword">this</strong>.storeHeap, limit, currentRow, offset,
-<a class="jxr_linenumber" name="3587" href="#3587">3587</a>               length, metric);
-<a class="jxr_linenumber" name="3588" href="#3588">3588</a>           <em class="jxr_comment">// Ok, we are good, let's try to get some results from the main heap.</em>
-<a class="jxr_linenumber" name="3589" href="#3589">3589</a>           <strong class="jxr_keyword">if</strong> (nextKv == KV_LIMIT) {
-<a class="jxr_linenumber" name="3590" href="#3590">3590</a>             <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.filter != <strong class="jxr_keyword">null</strong> &amp;&amp; filter.hasFilterRow()) {
-<a class="jxr_linenumber" name="3591" href="#3591">3591</a>               <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/filter/IncompatibleFilterException.html">IncompatibleFilterException</a>(
-<a class="jxr_linenumber" name="3592" href="#3592">3592</a>                 <span class="jxr_string">"Filter whose hasFilterRow() returns true is incompatible with scan with limit!"</span>);
-<a class="jxr_linenumber" name="3593" href="#3593">3593</a>             }
-<a class="jxr_linenumber" name="3594" href="#3594">3594</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>; <em class="jxr_comment">// We hit the limit.</em>
-<a class="jxr_linenumber" name="3595" href="#3595">3595</a>           }
-<a class="jxr_linenumber" name="3596" href="#3596">3596</a> 
-<a class="jxr_linenumber" name="3597" href="#3597">3597</a>           stopRow = nextKv == <strong class="jxr_keyword">null</strong> ||
-<a class="jxr_linenumber" name="3598" href="#3598">3598</a>               isStopRow(nextKv.getBuffer(), nextKv.getRowOffset(), nextKv.getRowLength());
-<a class="jxr_linenumber" name="3599" href="#3599">3599</a>           <em class="jxr_comment">// save that the row was empty before filters applied to it.</em>
-<a class="jxr_linenumber" name="3600" href="#3600">3600</a>           <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isEmptyRow = results.isEmpty();
-<a class="jxr_linenumber" name="3601" href="#3601">3601</a> 
-<a class="jxr_linenumber" name="3602" href="#3602">3602</a>           <em class="jxr_comment">// We have the part of the row necessary for filtering (all of it, usually).</em>
-<a class="jxr_linenumber" name="3603" href="#3603">3603</a>           <em class="jxr_comment">// First filter with the filterRow(List).</em>
-<a class="jxr_linenumber" name="3604" href="#3604">3604</a>           <strong class="jxr_keyword">if</strong> (filter != <strong class="jxr_keyword">null</strong> &amp;&amp; filter.hasFilterRow()) {
-<a class="jxr_linenumber" name="3605" href="#3605">3605</a>             filter.filterRow(results);
-<a class="jxr_linenumber" name="3606" href="#3606">3606</a>           }
-<a class="jxr_linenumber" name="3607" href="#3607">3607</a>           <strong class="jxr_keyword">if</strong> (isEmptyRow) {
-<a class="jxr_linenumber" name="3608" href="#3608">3608</a>             <strong class="jxr_keyword">boolean</strong> moreRows = nextRow(currentRow, offset, length);
-<a class="jxr_linenumber" name="3609" href="#3609">3609</a>             <strong class="jxr_keyword">if</strong> (!moreRows) <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="3610" href="#3610">3610</a>             results.clear();
-<a class="jxr_linenumber" name="3611" href="#3611">3611</a>             <em class="jxr_comment">// This row was totally filtered out, if this is NOT the last row,</em>
-<a class="jxr_linenumber" name="3612" href="#3612">3612</a>             <em class="jxr_comment">// we should continue on. Otherwise, nothing else to do.</em>
-<a class="jxr_linenumber" name="3613" href="#3613">3613</a>             <strong class="jxr_keyword">if</strong> (!stopRow) <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="3614" href="#3614">3614</a>             <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="3615" href="#3615">3615</a>           }
-<a class="jxr_linenumber" name="3616" href="#3616">3616</a> 
-<a class="jxr_linenumber" name="3617" href="#3617">3617</a>           <em class="jxr_comment">// Ok, we are done with storeHeap for this row.</em>
-<a class="jxr_linenumber" name="3618" href="#3618">3618</a>           <em class="jxr_comment">// Now we may need to fetch additional, non-essential data into row.</em>
-<a class="jxr_linenumber" name="3619" href="#3619">3619</a>           <em class="jxr_comment">// These values are not needed for filter to work, so we postpone their</em>
-<a class="jxr_linenumber" name="3620" href="#3620">3620</a>           <em class="jxr_comment">// fetch to (possibly) reduce amount of data loads from disk.</em>
-<a class="jxr_linenumber" name="3621" href="#3621">3621</a>           <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.joinedHeap != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3622" href="#3622">3622</a>             <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> nextJoinedKv = joinedHeap.peek();
-<a class="jxr_linenumber" name="3623" href="#3623">3623</a>             <em class="jxr_comment">// If joinedHeap is pointing to some other row, try to seek to a correct one.</em>
-<a class="jxr_linenumber" name="3624" href="#3624">3624</a>             <strong class="jxr_keyword">boolean</strong> mayHaveData =
-<a class="jxr_linenumber" name="3625" href="#3625">3625</a>               (nextJoinedKv != <strong class="jxr_keyword">null</strong> &amp;&amp; nextJoinedKv.matchingRow(currentRow, offset, length))
-<a class="jxr_linenumber" name="3626" href="#3626">3626</a>               || (<strong class="jxr_keyword">this</strong>.joinedHeap.seek(KeyValue.createFirstOnRow(currentRow, offset, length))
-<a class="jxr_linenumber" name="3627" href="#3627">3627</a>                   &amp;&amp; joinedHeap.peek() != <strong class="jxr_keyword">null</strong>
-<a class="jxr_linenumber" name="3628" href="#3628">3628</a>                   &amp;&amp; joinedHeap.peek().matchingRow(currentRow, offset, length));
-<a class="jxr_linenumber" name="3629" href="#3629">3629</a>             <strong class="jxr_keyword">if</strong> (mayHaveData) {
-<a class="jxr_linenumber" name="3630" href="#3630">3630</a>               joinedContinuationRow = current;
-<a class="jxr_linenumber" name="3631" href="#3631">3631</a>               populateFromJoinedHeap(results, limit, metric);
-<a class="jxr_linenumber" name="3632" href="#3632">3632</a>             }
-<a class="jxr_linenumber" name="3633" href="#3633">3633</a>           }
-<a class="jxr_linenumber" name="3634" href="#3634">3634</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="3635" href="#3635">3635</a>           <em class="jxr_comment">// Populating from the joined heap was stopped by limits, populate some more.</em>
-<a class="jxr_linenumber" name="3636" href="#3636">3636</a>           populateFromJoinedHeap(results, limit, metric);
-<a class="jxr_linenumber" name="3637" href="#3637">3637</a>         }
-<a class="jxr_linenumber" name="3638" href="#3638">3638</a> 
-<a class="jxr_linenumber" name="3639" href="#3639">3639</a>         <em class="jxr_comment">// We may have just called populateFromJoinedMap and hit the limits. If that is</em>
-<a class="jxr_linenumber" name="3640" href="#3640">3640</a>         <em class="jxr_comment">// the case, we need to call it again on the next next() invocation.</em>
-<a class="jxr_linenumber" name="3641" href="#3641">3641</a>         <strong class="jxr_keyword">if</strong> (joinedContinuationRow != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3642" href="#3642">3642</a>           <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="3643" href="#3643">3643</a>         }
-<a class="jxr_linenumber" name="3644" href="#3644">3644</a> 
-<a class="jxr_linenumber" name="3645" href="#3645">3645</a>         <em class="jxr_comment">// Finally, we are done with both joinedHeap and storeHeap.</em>
-<a class="jxr_linenumber" name="3646" href="#3646">3646</a>         <em class="jxr_comment">// Double check to prevent empty rows from appearing in result. It could be</em>
-<a class="jxr_linenumber" name="3647" href="#3647">3647</a>         <em class="jxr_comment">// the case when SingleColumnValueExcludeFilter is used.</em>
-<a class="jxr_linenumber" name="3648" href="#3648">3648</a>         <strong class="jxr_keyword">if</strong> (results.isEmpty()) {
-<a class="jxr_linenumber" name="3649" href="#3649">3649</a>           <strong class="jxr_keyword">boolean</strong> moreRows = nextRow(currentRow, offset, length);
-<a class="jxr_linenumber" name="3650" href="#3650">3650</a>           <strong class="jxr_keyword">if</strong> (!moreRows) <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="3651" href="#3651">3651</a>           <strong class="jxr_keyword">if</strong> (!stopRow) <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="3652" href="#3652">3652</a>         }
-<a class="jxr_linenumber" name="3653" href="#3653">3653</a> 
-<a class="jxr_linenumber" name="3654" href="#3654">3654</a>         <em class="jxr_comment">// We are done. Return the result.</em>
-<a class="jxr_linenumber" name="3655" href="#3655">3655</a>         <strong class="jxr_keyword">return</strong> !stopRow;
-<a class="jxr_linenumber" name="3656" href="#3656">3656</a>       }
-<a class="jxr_linenumber" name="3657" href="#3657">3657</a>     }
-<a class="jxr_linenumber" name="3658" href="#3658">3658</a> 
-<a class="jxr_linenumber" name="3659" href="#3659">3659</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> filterRowKey(byte[] row, <strong class="jxr_keyword">int</strong> offset, <strong class="jxr_keyword">short</strong> length) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3660" href="#3660">3660</a>       <strong class="jxr_keyword">return</strong> filter != <strong class="jxr_keyword">null</strong>
-<a class="jxr_linenumber" name="3661" href="#3661">3661</a>           &amp;&amp; filter.filterRowKey(row, offset, length);
-<a class="jxr_linenumber" name="3662" href="#3662">3662</a>     }
-<a class="jxr_linenumber" name="3663" href="#3663">3663</a> 
-<a class="jxr_linenumber" name="3664" href="#3664">3664</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> nextRow(byte [] currentRow, <strong class="jxr_keyword">int</strong> offset, <strong class="jxr_keyword">short</strong> length) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3665" href="#3665">3665</a>       assert <strong class="jxr_keyword">this</strong>.joinedContinuationRow == <strong class="jxr_keyword">null</strong>: <span class="jxr_string">"Trying to go to next row during joinedHeap read."</span>;
-<a class="jxr_linenumber" name="3666" href="#3666">3666</a>       <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> next;
-<a class="jxr_linenumber" name="3667" href="#3667">3667</a>       <strong class="jxr_keyword">while</strong> ((next = <strong class="jxr_keyword">this</strong>.storeHeap.peek()) != <strong class="jxr_keyword">null</strong> &amp;&amp;
-<a class="jxr_linenumber" name="3668" href="#3668">3668</a>              next.matchingRow(currentRow, offset, length)) {
-<a class="jxr_linenumber" name="3669" href="#3669">3669</a>         <strong class="jxr_keyword">this</strong>.storeHeap.next(MOCKED_LIST);
-<a class="jxr_linenumber" name="3670" href="#3670">3670</a>       }
-<a class="jxr_linenumber" name="3671" href="#3671">3671</a>       resetFilters();
-<a class="jxr_linenumber" name="3672" href="#3672">3672</a>       <em class="jxr_comment">// Calling the hook in CP which allows it to do a fast forward</em>
-<a class="jxr_linenumber" name="3673" href="#3673">3673</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.region.getCoprocessorHost() != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3674" href="#3674">3674</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.region.getCoprocessorHost().postScannerFilterRow(<strong class="jxr_keyword">this</strong>, currentRow);
-<a class="jxr_linenumber" name="3675" href="#3675">3675</a>       }
-<a class="jxr_linenumber" name="3676" href="#3676">3676</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="3677" href="#3677">3677</a>     }
-<a class="jxr_linenumber" name="3678" href="#3678">3678</a> 
-<a class="jxr_linenumber" name="3679" href="#3679">3679</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> isStopRow(byte [] currentRow, <strong class="jxr_keyword">int</strong> offset, <strong class="jxr_keyword">short</strong> length) {
-<a class="jxr_linenumber" name="3680" href="#3680">3680</a>       <strong class="jxr_keyword">return</strong> currentRow == <strong class="jxr_keyword">null</strong> ||
-<a class="jxr_linenumber" name="3681" href="#3681">3681</a>           (stopRow != <strong class="jxr_keyword">null</strong> &amp;&amp;
-<a class="jxr_linenumber" name="3682" href="#3682">3682</a>           comparator.compareRows(stopRow, 0, stopRow.length,
-<a class="jxr_linenumber" name="3683" href="#3683">3683</a>             currentRow, offset, length) &lt;= isScan);
-<a class="jxr_linenumber" name="3684" href="#3684">3684</a>     }
-<a class="jxr_linenumber" name="3685" href="#3685">3685</a> 
-<a class="jxr_linenumber" name="3686" href="#3686">3686</a>     @Override
-<a class="jxr_linenumber" name="3687" href="#3687">3687</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> close() {
-<a class="jxr_linenumber" name="3688" href="#3688">3688</a>       <strong class="jxr_keyword">if</strong> (storeHeap != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3689" href="#3689">3689</a>         storeHeap.close();
-<a class="jxr_linenumber" name="3690" href="#3690">3690</a>         storeHeap = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3691" href="#3691">3691</a>       }
-<a class="jxr_linenumber" name="3692" href="#3692">3692</a>       <strong class="jxr_keyword">if</strong> (joinedHeap != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3693" href="#3693">3693</a>         joinedHeap.close();
-<a class="jxr_linenumber" name="3694" href="#3694">3694</a>         joinedHeap = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="3695" href="#3695">3695</a>       }
-<a class="jxr_linenumber" name="3696" href="#3696">3696</a>       <em class="jxr_comment">// no need to sychronize here.</em>
-<a class="jxr_linenumber" name="3697" href="#3697">3697</a>       scannerReadPoints.remove(<strong class="jxr_keyword">this</strong>);
-<a class="jxr_linenumber" name="3698" href="#3698">3698</a>       <strong class="jxr_keyword">this</strong>.filterClosed = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="3699" href="#3699">3699</a>     }
-<a class="jxr_linenumber" name="3700" href="#3700">3700</a> 
-<a class="jxr_linenumber" name="3701" href="#3701">3701</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html">KeyValueHeap</a> getStoreHeapForTesting() {
-<a class="jxr_linenumber" name="3702" href="#3702">3702</a>       <strong class="jxr_keyword">return</strong> storeHeap;
-<a class="jxr_linenumber" name="3703" href="#3703">3703</a>     }
-<a class="jxr_linenumber" name="3704" href="#3704">3704</a> 
-<a class="jxr_linenumber" name="3705" href="#3705">3705</a>     @Override
-<a class="jxr_linenumber" name="3706" href="#3706">3706</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">boolean</strong> reseek(byte[] row) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3707" href="#3707">3707</a>       <strong class="jxr_keyword">if</strong> (row == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3708" href="#3708">3708</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(<span class="jxr_string">"Row cannot be null."</span>);
-<a class="jxr_linenumber" name="3709" href="#3709">3709</a>       }
-<a class="jxr_linenumber" name="3710" href="#3710">3710</a>       <strong class="jxr_keyword">boolean</strong> result = false;
-<a class="jxr_linenumber" name="3711" href="#3711">3711</a>       startRegionOperation();
-<a class="jxr_linenumber" name="3712" href="#3712">3712</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="3713" href="#3713">3713</a>         <em class="jxr_comment">// This could be a new thread from the last time we called next().</em>
-<a class="jxr_linenumber" name="3714" href="#3714">3714</a>         MultiVersionConsistencyControl.setThreadReadPoint(<strong class="jxr_keyword">this</strong>.readPt);
-<a class="jxr_linenumber" name="3715" href="#3715">3715</a>         <a href="../../../../../org/apache/hadoop/hbase/KeyValue.html">KeyValue</a> kv = KeyValue.createFirstOnRow(row);
-<a class="jxr_linenumber" name="3716" href="#3716">3716</a>         <em class="jxr_comment">// use request seek to make use of the lazy seek option. See HBASE-5520</em>
-<a class="jxr_linenumber" name="3717" href="#3717">3717</a>         result = <strong class="jxr_keyword">this</strong>.storeHeap.requestSeek(kv, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="3718" href="#3718">3718</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.joinedHeap != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="3719" href="#3719">3719</a>           result = <strong class="jxr_keyword">this</strong>.joinedHeap.requestSeek(kv, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">true</strong>) || result;
-<a class="jxr_linenumber" name="3720" href="#3720">3720</a>         }
-<a class="jxr_linenumber" name="3721" href="#3721">3721</a>       } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="3722" href="#3722">3722</a>         closeRegionOperation();
-<a class="jxr_linenumber" name="3723" href="#3723">3723</a>       }
-<a class="jxr_linenumber" name="3724" href="#3724">3724</a>       <strong class="jxr_keyword">return</strong> result;
-<a class="jxr_linenumber" name="3725" href="#3725">3725</a>     }
-<a class="jxr_linenumber" name="3726" href="#3726">3726</a>   }
-<a class="jxr_linenumber" name="3727" href="#3727">3727</a> 
-<a class="jxr_linenumber" name="3728" href="#3728">3728</a>   <em class="jxr_comment">// Utility methods</em>
-<a class="jxr_linenumber" name="3729" href="#3729">3729</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3730" href="#3730">3730</a> <em class="jxr_javadoccomment">   * A utility method to create new instances of HRegion based on the</em>
-<a class="jxr_linenumber" name="3731" href="#3731">3731</a> <em class="jxr_javadoccomment">   * {@link HConstants#REGION_IMPL} configuration property.</em>
-<a class="jxr_linenumber" name="3732" href="#3732">3732</a> <em class="jxr_javadoccomment">   * @param tableDir qualified path of directory where region should be located,</em>
-<a class="jxr_linenumber" name="3733" href="#3733">3733</a> <em class="jxr_javadoccomment">   * usually the table directory.</em>
-<a class="jxr_linenumber" name="3734" href="#3734">3734</a> <em class="jxr_javadoccomment">   * @param log The HLog is the outbound log for any updates to the HRegion</em>
-<a class="jxr_linenumber" name="3735" href="#3735">3735</a> <em class="jxr_javadoccomment">   * (There's a single HLog for all the HRegions on a single HRegionServer.)</em>
-<a class="jxr_linenumber" name="3736" href="#3736">3736</a> <em class="jxr_javadoccomment">   * The log file is a logfile from the previous execution that's</em>
-<a class="jxr_linenumber" name="3737" href="#3737">3737</a> <em class="jxr_javadoccomment">   * custom-computed for this HRegion. The HRegionServer computes and sorts the</em>
-<a class="jxr_linenumber" name="3738" href="#3738">3738</a> <em class="jxr_javadoccomment">   * appropriate log info for this HRegion. If there is a previous log file</em>
-<a class="jxr_linenumber" name="3739" href="#3739">3739</a> <em class="jxr_javadoccomment">   * (implying that the HRegion has been written-to before), then read it from</em>
-<a class="jxr_linenumber" name="3740" href="#3740">3740</a> <em class="jxr_javadoccomment">   * the supplied path.</em>
-<a class="jxr_linenumber" name="3741" href="#3741">3741</a> <em class="jxr_javadoccomment">   * @param fs is the filesystem.</em>
-<a class="jxr_linenumber" name="3742" href="#3742">3742</a> <em class="jxr_javadoccomment">   * @param conf is global configuration settings.</em>
-<a class="jxr_linenumber" name="3743" href="#3743">3743</a> <em class="jxr_javadoccomment">   * @param regionInfo - HRegionInfo that describes the region</em>
-<a class="jxr_linenumber" name="3744" href="#3744">3744</a> <em class="jxr_javadoccomment">   * is new), then read them from the supplied path.</em>
-<a class="jxr_linenumber" name="3745" href="#3745">3745</a> <em class="jxr_javadoccomment">   * @param htd the table descriptor</em>
-<a class="jxr_linenumber" name="3746" href="#3746">3746</a> <em class="jxr_javadoccomment">   * @param rsServices</em>
-<a class="jxr_linenumber" name="3747" href="#3747">3747</a> <em class="jxr_javadoccomment">   * @return the new instance</em>
-<a class="jxr_linenumber" name="3748" href="#3748">3748</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="3749" href="#3749">3749</a>   <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">HRegion</a> newHRegion(Path tableDir, <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/HLog.html">HLog</a> log, FileSystem fs,
-<a class="jxr_linenumber" name="3750" href="#3750">3750</a>       Configuration conf, <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> regionInfo, <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html">HTableDescriptor</a> htd,
-<a class="jxr_linenumber" name="3751" href="#3751">3751</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html">RegionServerServices</a> rsServices) {
-<a class="jxr_linenumber" name="3752" href="#3752">3752</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="3753" href="#3753">3753</a>       @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
-<a class="jxr_linenumber" name="3754" href="#3754">3754</a>       Class&lt;? <strong class="jxr_keyword">extends</strong> HRegion&gt; regionClass =
-<a class="jxr_linenumber" name="3755" href="#3755">3755</a>           (Class&lt;? <strong class="jxr_keyword">extends</strong> HRegion&gt;) conf.getClass(HConstants.REGION_IMPL, HRegion.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="3756" href="#3756">3756</a> 
-<a class="jxr_linenumber" name="3757" href="#3757">3757</a>       Constructor&lt;? <strong class="jxr_keyword">extends</strong> HRegion&gt; c =
-<a class="jxr_linenumber" name="3758" href="#3758">3758</a>           regionClass.getConstructor(Path.<strong class="jxr_keyword">class</strong>, HLog.<strong class="jxr_keyword">class</strong>, FileSystem.<strong class="jxr_keyword">class</strong>,
-<a class="jxr_linenumber" name="3759" href="#3759">3759</a>               Configuration.<strong class="jxr_keyword">class</strong>, HRegionInfo.<strong class="jxr_keyword">class</strong>, HTableDescriptor.<strong class="jxr_keyword">class</strong>,
-<a class="jxr_linenumber" name="3760" href="#3760">3760</a>               RegionServerServices.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="3761" href="#3761">3761</a> 
-<a class="jxr_linenumber" name="3762" href="#3762">3762</a>       <strong class="jxr_keyword">return</strong> c.newInstance(tableDir, log, fs, conf, regionInfo, htd, rsServices);
-<a class="jxr_linenumber" name="3763" href="#3763">3763</a>     } <strong class="jxr_keyword">catch</strong> (Throwable e) {
-<a class="jxr_linenumber" name="3764" href="#3764">3764</a>       <em class="jxr_comment">// todo: what should I throw here?</em>
-<a class="jxr_linenumber" name="3765" href="#3765">3765</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalStateException(<span class="jxr_string">"Could not instantiate a region instance."</span>, e);
-<a class="jxr_linenumber" name="3766" href="#3766">3766</a>     }
-<a class="jxr_linenumber" name="3767" href="#3767">3767</a>   }
-<a class="jxr_linenumber" name="3768" href="#3768">3768</a> 
-<a class="jxr_linenumber" name="3769" href="#3769">3769</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3770" href="#3770">3770</a> <em class="jxr_javadoccomment">   * Convenience method creating new HRegions. Used by createTable and by the</em>
-<a class="jxr_linenumber" name="3771" href="#3771">3771</a> <em class="jxr_javadoccomment">   * bootstrap code in the HMaster constructor.</em>
-<a class="jxr_linenumber" name="3772" href="#3772">3772</a> <em class="jxr_javadoccomment">   * Note, this method creates an {@link HLog} for the created region. It</em>
-<a class="jxr_linenumber" name="3773" href="#3773">3773</a> <em class="jxr_javadoccomment">   * needs to be closed explicitly.  Use {@link HRegion#getLog()} to get</em>
-<a class="jxr_linenumber" name="3774" href="#3774">3774</a> <em class="jxr_javadoccomment">   * access.  &lt;b&gt;When done with a region created using this method, you will</em>
-<a class="jxr_linenumber" name="3775" href="#3775">3775</a> <em class="jxr_javadoccomment">   * need to explicitly close the {@link HLog} it created too; it will not be</em>
-<a class="jxr_linenumber" name="3776" href="#3776">3776</a> <em class="jxr_javadoccomment">   * done for you.  Not closing the log will leave at least a daemon thread</em>
-<a class="jxr_linenumber" name="3777" href="#3777">3777</a> <em class="jxr_javadoccomment">   * running.&lt;/b&gt;  Call {@link #closeHRegion(HRegion)} and it will do</em>
-<a class="jxr_linenumber" name="3778" href="#3778">3778</a> <em class="jxr_javadoccomment">   * necessary cleanup for you.</em>
-<a class="jxr_linenumber" name="3779" href="#3779">3779</a> <em class="jxr_javadoccomment">   * @param info Info for region to create.</em>
-<a class="jxr_linenumber" name="3780" href="#3780">3780</a> <em class="jxr_javadoccomment">   * @param rootDir Root directory for HBase instance</em>
-<a class="jxr_linenumber" name="3781" href="#3781">3781</a> <em class="jxr_javadoccomment">   * @param conf</em>
-<a class="jxr_linenumber" name="3782" href="#3782">3782</a> <em class="jxr_javadoccomment">   * @param hTableDescriptor</em>
-<a class="jxr_linenumber" name="3783" href="#3783">3783</a> <em class="jxr_javadoccomment">   * @return new HRegion</em>
-<a class="jxr_linenumber" name="3784" href="#3784">3784</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="3785" href="#3785">3785</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="3786" href="#3786">3786</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="3787" href="#3787">3787</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">HRegion</a> createHRegion(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> info, <strong class="jxr_keyword">final</strong> Path rootDir,
-<a class="jxr_linenumber" name="3788" href="#3788">3788</a>       <strong class="jxr_keyword">final</strong> Configuration conf, <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html">HTableDescriptor</a> hTableDescriptor)
-<a class="jxr_linenumber" name="3789" href="#3789">3789</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3790" href="#3790">3790</a>     <strong class="jxr_keyword">return</strong> createHRegion(info, rootDir, conf, hTableDescriptor, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="3791" href="#3791">3791</a>   }
-<a class="jxr_linenumber" name="3792" href="#3792">3792</a> 
-<a class="jxr_linenumber" name="3793" href="#3793">3793</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3794" href="#3794">3794</a> <em class="jxr_javadoccomment">   * This will do the necessary cleanup a call to</em>
-<a class="jxr_linenumber" name="3795" href="#3795">3795</a> <em class="jxr_javadoccomment">   * {@link #createHRegion(HRegionInfo, Path, Configuration, HTableDescriptor)}</em>
-<a class="jxr_linenumber" name="3796" href="#3796">3796</a> <em class="jxr_javadoccomment">   * requires.  This method will close the region and then close its</em>
-<a class="jxr_linenumber" name="3797" href="#3797">3797</a> <em class="jxr_javadoccomment">   * associated {@link HLog} file.  You use it if you call the other createHRegion,</em>
-<a class="jxr_linenumber" name="3798" href="#3798">3798</a> <em class="jxr_javadoccomment">   * the one that takes an {@link HLog} instance but don't be surprised by the</em>
-<a class="jxr_linenumber" name="3799" href="#3799">3799</a> <em class="jxr_javadoccomment">   * call to the {@link HLog#closeAndDelete()} on the {@link HLog} the</em>
-<a class="jxr_linenumber" name="3800" href="#3800">3800</a> <em class="jxr_javadoccomment">   * HRegion was carrying.</em>
-<a class="jxr_linenumber" name="3801" href="#3801">3801</a> <em class="jxr_javadoccomment">   * @param r</em>
-<a class="jxr_linenumber" name="3802" href="#3802">3802</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="3803" href="#3803">3803</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="3804" href="#3804">3804</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> closeHRegion(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">HRegion</a> r) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3805" href="#3805">3805</a>     <strong class="jxr_keyword">if</strong> (r == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="3806" href="#3806">3806</a>     r.close();
-<a class="jxr_linenumber" name="3807" href="#3807">3807</a>     <strong class="jxr_keyword">if</strong> (r.getLog() == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="3808" href="#3808">3808</a>     r.getLog().closeAndDelete();
-<a class="jxr_linenumber" name="3809" href="#3809">3809</a>   }
-<a class="jxr_linenumber" name="3810" href="#3810">3810</a> 
-<a class="jxr_linenumber" name="3811" href="#3811">3811</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3812" href="#3812">3812</a> <em class="jxr_javadoccomment">   * Convenience method creating new HRegions. Used by createTable.</em>
-<a class="jxr_linenumber" name="3813" href="#3813">3813</a> <em class="jxr_javadoccomment">   * The {@link HLog} for the created region needs to be closed explicitly.</em>
-<a class="jxr_linenumber" name="3814" href="#3814">3814</a> <em class="jxr_javadoccomment">   * Use {@link HRegion#getLog()} to get access.</em>
-<a class="jxr_linenumber" name="3815" href="#3815">3815</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="3816" href="#3816">3816</a> <em class="jxr_javadoccomment">   * @param info Info for region to create.</em>
-<a class="jxr_linenumber" name="3817" href="#3817">3817</a> <em class="jxr_javadoccomment">   * @param rootDir Root directory for HBase instance</em>
-<a class="jxr_linenumber" name="3818" href="#3818">3818</a> <em class="jxr_javadoccomment">   * @param conf</em>
-<a class="jxr_linenumber" name="3819" href="#3819">3819</a> <em class="jxr_javadoccomment">   * @param hTableDescriptor</em>
-<a class="jxr_linenumber" name="3820" href="#3820">3820</a> <em class="jxr_javadoccomment">   * @param hlog shared HLog</em>
-<a class="jxr_linenumber" name="3821" href="#3821">3821</a> <em class="jxr_javadoccomment">   * @param initialize - true to initialize the region</em>
-<a class="jxr_linenumber" name="3822" href="#3822">3822</a> <em class="jxr_javadoccomment">   * @return new HRegion</em>
-<a class="jxr_linenumber" name="3823" href="#3823">3823</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="3824" href="#3824">3824</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="3825" href="#3825">3825</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="3826" href="#3826">3826</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">HRegion</a> createHRegion(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> info, <strong class="jxr_keyword">final</strong> Path rootDir,
-<a class="jxr_linenumber" name="3827" href="#3827">3827</a>                                       <strong class="jxr_keyword">final</strong> Configuration conf,
-<a class="jxr_linenumber" name="3828" href="#3828">3828</a>                                       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html">HTableDescriptor</a> hTableDescriptor,
-<a class="jxr_linenumber" name="3829" href="#3829">3829</a>                                       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/HLog.html">HLog</a> hlog,
-<a class="jxr_linenumber" name="3830" href="#3830">3830</a>                                       <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> initialize)
-<a class="jxr_linenumber" name="3831" href="#3831">3831</a>       <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3832" href="#3832">3832</a>     <strong class="jxr_keyword">return</strong> createHRegion(info, rootDir, conf, hTableDescriptor,
-<a class="jxr_linenumber" name="3833" href="#3833">3833</a>         hlog, initialize, false);
-<a class="jxr_linenumber" name="3834" href="#3834">3834</a>   }
-<a class="jxr_linenumber" name="3835" href="#3835">3835</a> 
-<a class="jxr_linenumber" name="3836" href="#3836">3836</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3837" href="#3837">3837</a> <em class="jxr_javadoccomment">   * Convenience method creating new HRegions. Used by createTable.</em>
-<a class="jxr_linenumber" name="3838" href="#3838">3838</a> <em class="jxr_javadoccomment">   * The {@link HLog} for the created region needs to be closed</em>
-<a class="jxr_linenumber" name="3839" href="#3839">3839</a> <em class="jxr_javadoccomment">   * explicitly, if it is not null.</em>
-<a class="jxr_linenumber" name="3840" href="#3840">3840</a> <em class="jxr_javadoccomment">   * Use {@link HRegion#getLog()} to get access.</em>
-<a class="jxr_linenumber" name="3841" href="#3841">3841</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="3842" href="#3842">3842</a> <em class="jxr_javadoccomment">   * @param info Info for region to create.</em>
-<a class="jxr_linenumber" name="3843" href="#3843">3843</a> <em class="jxr_javadoccomment">   * @param rootDir Root directory for HBase instance</em>
-<a class="jxr_linenumber" name="3844" href="#3844">3844</a> <em class="jxr_javadoccomment">   * @param conf</em>
-<a class="jxr_linenumber" name="3845" href="#3845">3845</a> <em class="jxr_javadoccomment">   * @param hTableDescriptor</em>
-<a class="jxr_linenumber" name="3846" href="#3846">3846</a> <em class="jxr_javadoccomment">   * @param hlog shared HLog</em>
-<a class="jxr_linenumber" name="3847" href="#3847">3847</a> <em class="jxr_javadoccomment">   * @param initialize - true to initialize the region</em>
-<a class="jxr_linenumber" name="3848" href="#3848">3848</a> <em class="jxr_javadoccomment">   * @param ignoreHLog - true to skip generate new hlog if it is null, mostly for createTable</em>
-<a class="jxr_linenumber" name="3849" href="#3849">3849</a> <em class="jxr_javadoccomment">   * @return new HRegion</em>
-<a class="jxr_linenumber" name="3850" href="#3850">3850</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="3851" href="#3851">3851</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="3852" href="#3852">3852</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html">HRegion</a> createHRegion(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> info, <strong class="jxr_keyword">final</strong> Path rootDir,
-<a class="jxr_linenumber" name="3853" href="#3853">3853</a>                                       <strong class="jxr_keyword">final</strong> Configuration conf,
-<a class="jxr_linenumber" name="3854" href="#3854">3854</a>                                       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html">HTableDescriptor</a> hTableDescriptor,
-<a class="jxr_linenumber" name="3855" href="#3855">3855</a>                                       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/HLog.html">HLog</a> hlog,

[... 3859 lines stripped ...]