[
https://issues.apache.org/jira/browse/HADOOP-10852?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Benoy Antony updated HADOOP-10852:
----------------------------------
Description:
_NetgroupCache_ internally uses two ConcurrentHashMaps and a boolean variable
to signal updates on one of the ConcurrentHashMap
None of the functions are synchronized and hence is possible to have
unexpected results due to race condition between different threads.
As an example, consider the following sequence:
Thread1 :
{{add}} a group
{{netgroupToUsersMap}} is updated.
{{netgroupToUsersMapUpdated}} is set to true.
Thread 2:
calls {{getNetgroups}} for a user
Due to re-ordering, {{netgroupToUsersMapUpdated=true}} is visible, but updates
in {{netgroupToUsersMap}} is not visible.
Does a wrong update with older {{netgroupToUsersMap}} values.
was:
_NetgroupCache_ internally uses two _ConcurrentHashMap_s and a boolean variable
to signal updates on one of the _ConcurrentHashMap_
None of the functions are synchronized and hence is possible to have
unexpected results due to race condition between different threads.
As an example, consider the following sequence:
Thread1 :
{{add}} a group
{{netgroupToUsersMap}} is updated.
{{netgroupToUsersMapUpdated}} is set to true.
Thread 2:
calls {{getNetgroups}} for a user
Due to re-ordering, {{netgroupToUsersMapUpdated=true}} is visible, but updates
in {{netgroupToUsersMap}} is not visible.
Does a wrong update with older {{netgroupToUsersMap}} values.
> NetgroupCache is not thread-safe
> --------------------------------
>
> Key: HADOOP-10852
> URL: https://issues.apache.org/jira/browse/HADOOP-10852
> Project: Hadoop Common
> Issue Type: Bug
> Components: security
> Affects Versions: 2.5.0, 2.4.1
> Reporter: Benoy Antony
> Assignee: Benoy Antony
> Attachments: HADOOP-10852.patch, HADOOP-10852.patch
>
>
> _NetgroupCache_ internally uses two ConcurrentHashMaps and a boolean variable
> to signal updates on one of the ConcurrentHashMap
> None of the functions are synchronized and hence is possible to have
> unexpected results due to race condition between different threads.
> As an example, consider the following sequence:
> Thread1 :
> {{add}} a group
> {{netgroupToUsersMap}} is updated.
> {{netgroupToUsersMapUpdated}} is set to true.
> Thread 2:
> calls {{getNetgroups}} for a user
> Due to re-ordering, {{netgroupToUsersMapUpdated=true}} is visible, but
> updates in {{netgroupToUsersMap}} is not visible.
> Does a wrong update with older {{netgroupToUsersMap}} values.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)