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

Sangjin Lee commented on HADOOP-12593:
--------------------------------------

I don't think that's a real issue. The key assumption here is that there is 
only a single writer thread (these are basically thread-local data structures). 
With volatile declarations and a single writer thread, even if a reader comes 
in during the "+=" operation it's not going to be a problem.

I'd be the first to admit that the way it is written is not very clear or 
intentional, but t appears correct. The only exception to the single-writer 
rule is Statistics.rootData. However, that is also currently protected by the 
Statistics instance lock. Again, that could be made more explicit (e.g. 
sometimes synchronization is done in a couple of layers above in the call 
chain).

Hope this helps.

> multiple "volatile long" field declarations exist in the Hadoop codebase
> ------------------------------------------------------------------------
>
>                 Key: HADOOP-12593
>                 URL: https://issues.apache.org/jira/browse/HADOOP-12593
>             Project: Hadoop Common
>          Issue Type: Bug
>    Affects Versions: 2.8.0
>            Reporter: Steve Loughran
>            Priority: Minor
>
> If you get your IDE to scan for "volatile long", you find 20-30 entries. 
> Volatile operations on `long` variables are not guaranteed to be atomic, so 
> these usages can be vulnerable to race conditions generating invalid data.
> they need to be replaced by AtomicLong references, except in the specific 
> case that you want performance values for statistics, and are prepared to 
> take the risk



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to