[
https://issues.apache.org/jira/browse/HBASE-14279?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14992856#comment-14992856
]
Hiroshi Ikeda commented on HBASE-14279:
---------------------------------------
{code}
public Set<V> values(K key) {
- return container.get(key);
+ Map<K, Set<V>> seg = segments(key);
+ return seg.get(key);
}
{code}
Defensively copy under the lock of the segment (the reason was already
commented a few month ago), and consequently using valueSetFactory is almost
meaningless:
{code}
+ Set<V> set = seg.get(key);
+ if (set == null) {
+ set = valueSetFactory.get();
+ seg.put(key, set);
}
{code}
> Race condition in ConcurrentIndex
> ---------------------------------
>
> Key: HBASE-14279
> URL: https://issues.apache.org/jira/browse/HBASE-14279
> Project: HBase
> Issue Type: Bug
> Reporter: Hiroshi Ikeda
> Assignee: Heng Chen
> Priority: Minor
> Attachments: HBASE-14279.patch, HBASE-14279_v2.patch,
> HBASE-14279_v3.patch, LockStripedBag.java
>
>
> {{ConcurrentIndex.put}} and {{remove}} are in race condition. It is possible
> to remove a non-empty set, and to add a value to a removed set. Also
> {{ConcurrentIndex.values}} is vague in sense that the returned set sometimes
> trace the current state and sometimes doesn't.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)