[ https://issues.apache.org/jira/browse/HBASE-6900?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13467590#comment-13467590 ]
ramkrishna.s.vasudevan commented on HBASE-6900: ----------------------------------------------- [~lhofhansl] Can you take a look at this? So that i can rebase the patch based on your suggestion. > 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