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

Mark Christiaens commented on HBASE-16737:
------------------------------------------

[~anoop.hbase] The call through {{preScannerClose}} seems OK to me.

To me, this code looks surprising 
(org.apache.hadoop.hbase.regionserver.KeyValueHeap#close):
{noformat}
public void close() {
    if (this.current != null) {
      this.current.close();
    }
    if (this.heap != null) {
      KeyValueScanner scanner;
      while ((scanner = this.heap.poll()) != null) {
        scanner.close();
      }
    }
  }
{noformat}

Looks like it wants to close all scanners that are in the {{heap}}.  Instead of 
iterating over them and closing them, the code performs a _poll_ to get them?

> NPE during close of RegionScanner
> ---------------------------------
>
>                 Key: HBASE-16737
>                 URL: https://issues.apache.org/jira/browse/HBASE-16737
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 1.0.0
>            Reporter: Mark Christiaens
>
> We encountered the following stack trace during high load:
> {noformat}
> Unexpected throwable object 
> java.lang.NullPointerException
>       at 
> org.apache.hadoop.hbase.CellComparator.compareRows(CellComparator.java:186)
>       at 
> org.apache.hadoop.hbase.CellComparator.compare(CellComparator.java:63)
>       at 
> org.apache.hadoop.hbase.KeyValue$KVComparator.compare(KeyValue.java:2021)
>       at 
> org.apache.hadoop.hbase.regionserver.KeyValueHeap$KVScannerComparator.compare(KeyValueHeap.java:202)
>       at 
> org.apache.hadoop.hbase.regionserver.KeyValueHeap$KVScannerComparator.compare(KeyValueHeap.java:178)
>       at 
> org.apache.hadoop.hbase.regionserver.KeyValueHeap$KVScannerComparator.compare(KeyValueHeap.java:168)
>       at 
> java.util.PriorityQueue.siftDownUsingComparator(PriorityQueue.java:719)
>       at java.util.PriorityQueue.siftDown(PriorityQueue.java:687)
>       at java.util.PriorityQueue.poll(PriorityQueue.java:595)
>       at 
> org.apache.hadoop.hbase.regionserver.KeyValueHeap.close(KeyValueHeap.java:218)
>       at 
> org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.close(HRegion.java:5608)
>       at 
> org.apache.phoenix.coprocessor.BaseScannerRegionObserver$2.close(BaseScannerRegionObserver.java:279)
>       at 
> org.apache.phoenix.coprocessor.BaseScannerRegionObserver$1.close(BaseScannerRegionObserver.java:186)
>       at 
> org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:2378)
>       at 
> org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:32205)
>       at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2034)
>       at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107)
>       at 
> org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130)
>       at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107)
>       at java.lang.Thread.run(Thread.java:745)
> {noformat}
> What I suspect is happening is that the {{RegionScannerImpl}} is being closed 
> while the scanner's lease is expired.  During this close, the underlying 
> {{KeyValueHeap}} is being polled.  the {{heap}} tries to read data from 
> {{KeyValueScanners}} that then return {{null}} which causes the crash.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to