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

Zhijie Shen commented on HADOOP-11274:
--------------------------------------

[~djp], I'm afraid read and write access to other.updatingResource is still not 
completely synchronized after the patch.
{code}
     this.updatingResource = new HashMap<String, 
String[]>(other.updatingResource);
     this.finalParameters = new HashSet<String>(other.finalParameters);
{code}

updatingResource can be also modified by {{set(String name, String value, 
String source)}} and {{readFields(DataInput in)}}.

> ConcurrentModificationException in Configuration Copy Constructor
> -----------------------------------------------------------------
>
>                 Key: HADOOP-11274
>                 URL: https://issues.apache.org/jira/browse/HADOOP-11274
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: conf
>            Reporter: Junping Du
>            Assignee: Junping Du
>            Priority: Blocker
>         Attachments: HADOOP-11274.patch
>
>
> Exception as below happens in doing some configuration update in parallel:
> {noformat}
> java.util.ConcurrentModificationException
>       at java.util.HashMap$HashIterator.nextEntry(HashMap.java:922)
>       at java.util.HashMap$EntryIterator.next(HashMap.java:962)
>       at java.util.HashMap$EntryIterator.next(HashMap.java:960)
>       at java.util.HashMap.putAllForCreate(HashMap.java:554)
>       at java.util.HashMap.<init>(HashMap.java:298)
>       at org.apache.hadoop.conf.Configuration.<init>(Configuration.java:703)
> {noformat}
> In a constructor of Configuration - public Configuration(Configuration 
> other), the copy of updatingResource data structure in copy constructor is 
> not synchronized properly. 
> Configuration.get() eventually calls loadProperty() where updatingResource 
> gets updated. So, whats happening here is one thread is trying to do copy of 
> Configuration as demonstrated in stack trace and other thread is doing 
> Configuration.get(key) and than ConcurrentModificationException occurs 
> because copying of updatingResource is not synchronized in constructor. 
> We should make the update to updatingResource get synchronized, and also fix 
> other tiny synchronized issues there.



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

Reply via email to