hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ramkrishna.s.vasudevan (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-6900) RegionScanner.reseek() creates NPE when a flush or compaction happens before the reseek.
Date Mon, 01 Oct 2012 04:58:10 GMT

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

ramkrishna.s.vasudevan commented on HBASE-6900:
-----------------------------------------------

@Lars
I too first thought of performing these checks in the RegionScannerImpl level but 
-> The StoreScanner heap is not exposed outside as the storeHeap internally has the Storescanner
heap(which is on the memstore and the storefiles).  The KeyValueScanner is the one that invokes
the reseek() api.
-> RegionScanner can have customised implementations also.
What do you feel Lars?

                
> 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
>         Attachments: 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

Mime
View raw message