PriorityQueue isn't thread safe, KeyValueHeap uses it that way
--------------------------------------------------------------

                 Key: HBASE-2503
                 URL: https://issues.apache.org/jira/browse/HBASE-2503
             Project: Hadoop HBase
          Issue Type: Bug
    Affects Versions: 0.20.3
            Reporter: Jean-Daniel Cryans
            Assignee: Jean-Daniel Cryans
            Priority: Critical
             Fix For: 0.20.5, 0.21.0


In the same spirit as HBASE-2077, but a bit different (at least to me). Dave 
Latham had the following NPE killing a RS:

{code}
Exception in thread "regionserver/192.168.41.2:60020.leaseChecker" 
java.lang.NullPointerException
        at 
org.apache.hadoop.hbase.regionserver.KeyValueHeap$KVScannerComparator.compare(KeyValueHeap.java:127)
        at 
org.apache.hadoop.hbase.regionserver.KeyValueHeap$KVScannerComparator.compare(KeyValueHeap.java:117)
        at 
java.util.PriorityQueue.siftDownUsingComparator(PriorityQueue.java:644)
        at java.util.PriorityQueue.siftDown(PriorityQueue.java:612)
        at java.util.PriorityQueue.poll(PriorityQueue.java:523)
        at 
org.apache.hadoop.hbase.regionserver.KeyValueHeap.close(KeyValueHeap.java:151)
        at 
org.apache.hadoop.hbase.regionserver.HRegion$RegionScanner.close(HRegion.java:1862)
        at 
org.apache.hadoop.hbase.regionserver.HRegionServer$ScannerListener.leaseExpired(HRegionServer.java:1959)
        at org.apache.hadoop.hbase.Leases.run(Leases.java:98)
{code}

He also has the same stack traces from 2077. The PQ javadoc says this class is 
not thread safe, but it is used by the leaseChecker thread and the client 
threads. We need to use something like the BlockingPriorityQueue instead.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to