hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ramkrishna.s.vasudevan (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-16643) Reverse scanner heap creation may not allow MSLAB closure due to improper ref counting of segments
Date Thu, 22 Sep 2016 08:21:21 GMT

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

ramkrishna.s.vasudevan commented on HBASE-16643:
------------------------------------------------

[~saint.ack@gmail.com], [~busbey]
Is it ok to break a CP exposed Limited Private interface in 2.0 version? 
Thought the fix for this JIRA is one line I would like to do the clean up of the MemstoreScanner.
Hence went with this way. 
I can see if possible to do without break but wanted to know the contract as an information.
Thanks you all. 

> 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
>
>
> 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)

Mime
View raw message