Pavel Avgustinov created HADOOP-12944:
-----------------------------------------

             Summary: Prevent race condition during class initialization
                 Key: HADOOP-12944
                 URL: https://issues.apache.org/jira/browse/HADOOP-12944
             Project: Hadoop Common
          Issue Type: Bug
          Components: fs
            Reporter: Pavel Avgustinov
            Priority: Minor
         Attachments: HADOOP-12944.1.patch

In HADOOP-11969, [~busbey] tracked down a non-deterministic 
{{NullPointerException}} to an oddity in the Java memory model: When multiple 
threads trigger the loading of a class at the same time, one of them wins and 
creates the {{java.lang.Class}} instance; the others block during this 
initialization, but once it is complete they may obtain a reference to the 
{{Class}} which has non-{{final}} fields still containing their default (i.e. 
{{null}}) values. This leads to runtime failures that are hard to debug or 
diagnose.

HADOOP-11969 observed that {{ThreadLocal}} fields, by their very nature, are 
very likely to be accessed from multiple threads, and thus the problem is 
particularly severe there. Consequently, the patch removed all occurrences of 
the issue in the code base.

Unfortunately, since then HDFS-7964 has [reverted one of the fixes during a 
refactoring|https://github.com/apache/hadoop/commit/2151716832ad14932dd65b1a4e47e64d8d6cd767#diff-0c2e9f7f9e685f38d1a11373b627cfa6R151],
 and introduced a [new instance of the 
problem|https://github.com/apache/hadoop/commit/2151716832ad14932dd65b1a4e47e64d8d6cd767#diff-6334d0df7d9aefbccd12b21bb7603169R43].

The attached patch addresses the issue by adding the missing {{final}} modifier 
in these two cases.



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

Reply via email to