[
https://issues.apache.org/jira/browse/HBASE-21047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16581778#comment-16581778
]
Mingliang Liu commented on HBASE-21047:
---------------------------------------
I don't see direct call of the constructor other than
{{StoreFile::getStoreFileScanner()}} method. But I like the idea of increase /
decrease safely in the same class. +1 (non-binding)
Nit: in test {{HColumnDescriptor hcd = mock(HColumnDescriptor.class);}} seems
not useful. We can delete it.
p.s. Maintaining the reference count manually is a miracle to me. Besides this
JIRA, another problem is that one's forgetting to {{close}} might have
"leakage" behavior. I would consider {{WeakHashMap}} if possible, though I
don't have too much context here.
> Object creation of StoreFileScanner thru constructor and close may leave
> refCount to -1
> ---------------------------------------------------------------------------------------
>
> Key: HBASE-21047
> URL: https://issues.apache.org/jira/browse/HBASE-21047
> Project: HBase
> Issue Type: Bug
> Reporter: Vishal Khandelwal
> Assignee: Vishal Khandelwal
> Priority: Major
> Fix For: 1.5.0
>
> Attachments: HBASE-21047.branch-1.v1.patch
>
>
> During object creation "*StoreFileScanner*", it does not increase the
> refCount whereas while close it decrements the reader refCount. This will
> cause refCount to -1 and isReadReference method was returning true
> (refCount.get() != 0 This is causing store file not to be deleted. This may
> also cause issue in situation when some thread is holding a scanner but it
> may actually be closed due to above bug. Impact of this would be really high.
> Attatching patch for the fix which makes sure if reference is held either
> thru getScanner method or constructor, ref is always updated. Patch also
> contains a test which validates the issue.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)