[ 
https://issues.apache.org/jira/browse/HBASE-6900?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13470024#comment-13470024
 ] 

Anoop Sam John commented on HBASE-6900:
---------------------------------------

bq.I was just seeing what if the lastTop was null so that checkReseek doesn't 
reset the heap. If that will not happen then the above change should be fine 
Lars.
Store#notifyChangedReadersObservers() will set this lastTop to the old heap 
peeked value. This will happen when in between of scan compaction happens or 
flush.
bq.Even if that happens, don't you always want to reseek to the kv that passed 
in?
Yes ideally whatever be the case when reseek() API is called from the CP expect 
a reseek to happen to the passed KV
                
> RegionScanner.reseek() creates NPE when a flush or compaction happens before 
> the reseek.
> ----------------------------------------------------------------------------------------
>
>                 Key: HBASE-6900
>                 URL: https://issues.apache.org/jira/browse/HBASE-6900
>             Project: HBase
>          Issue Type: Bug
>            Reporter: ramkrishna.s.vasudevan
>            Assignee: ramkrishna.s.vasudevan
>             Fix For: 0.94.2, 0.96.0
>
>         Attachments: 6900-test.txt, HBASE-6900_1.patch, HBASE-6900.patch
>
>
> HBASE-5520 introduced reseek() on the RegionScanner.  
> Now when a scanner is created we have the StoreScanner heap.  After this if a 
> flush or compaction happens parallely all the StoreScannerObservers are 
> cleared so that whenever a new next() call happens we tend to recreate the 
> scanner based on the latest store files.
> The reseek() in StoreScanner expects the heap not to be null because always 
> reseek would be called from next()
> {code}
> public synchronized boolean reseek(KeyValue kv) throws IOException {
>     //Heap cannot be null, because this is only called from next() which
>     //guarantees that heap will never be null before this call.
>     if (explicitColumnQuery && lazySeekEnabledGlobally) {
>       return heap.requestSeek(kv, true, useRowColBloom);
>     } else {
>       return heap.reseek(kv);
>     }
>   }
> {code}
> Now when we call RegionScanner.reseek() directly using CPs we tend to get a 
> NPE.  In our case it happened when a major compaction was going on.  I will 
> also attach a testcase to show the problem.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to