hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ramkrishna.s.vasudevan (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HBASE-16643) Reverse scanner heap creation may not allow MSLAB closure due to inproper ref counting of segments
Date Fri, 16 Sep 2016 07:55:20 GMT
ramkrishna.s.vasudevan created HBASE-16643:
----------------------------------------------

             Summary: Reverse scanner heap creation may not allow MSLAB closure due to inproper
ref counting of segments
                 Key: HBASE-16643
                 URL: https://issues.apache.org/jira/browse/HBASE-16643
             Project: HBase
          Issue Type: Bug
            Reporter: ramkrishna.s.vasudevan
            Assignee: ramkrishna.s.vasudevan
            Priority: Critical


In the reverse scanner case,
While doing 'initBackwardHeapIfNeeded' in MemstoreScanner for setting the backward heap, we
do a 
{code}
if ((backwardHeap == null) && (forwardHeap != null)) {
        forwardHeap.close();
        forwardHeap = null;
        // before building the heap seek for the relevant key on the scanners,
        // for the heap to be built from the scanners correctly
        for (KeyValueScanner scan : scanners) {
          if (toLast) {
            res |= scan.seekToLastRow();
          } else {
            res |= scan.backwardSeek(cell);
          }
        }
{code}
forwardHeap.close(). This would internally decrement the MSLAB ref counter for the current
active segment and snapshot segment.
When the scan is actually closed again we do close() and that will again decrement the count.
Here chances are there that the count would go negative and hence the actual MSLAB closure
that checks for refCount==0 will fail. Apart from this, when the refCount becomes 0 after
the firstClose if any other thread requests to close the segment, then we will end up in corrupted
segment.



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

Mime
View raw message