[ https://issues.apache.org/jira/browse/HBASE-16643?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ramkrishna.s.vasudevan updated HBASE-16643: ------------------------------------------- Attachment: HBASE-16643_7.patch Updated patch addresses the comments. And now close() will close the scanners individually if heap is null. > Reverse scanner heap creation may not allow MSLAB closure due to improper 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 > Fix For: 2.0.0 > > Attachments: HBASE-16643.patch, HBASE-16643_1.patch, > HBASE-16643_2.patch, HBASE-16643_3.patch, HBASE-16643_4.patch, > HBASE-16643_5.patch, HBASE-16643_6.patch, HBASE-16643_7.patch > > > 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 because the segment could be put back to the MSLAB pool. -- This message was sent by Atlassian JIRA (v6.3.4#6332)