Parcourir la source

Revert "HADOOP-11274. ConcurrentModificationException in Configuration Copy Constructor. Contributed by Junping Du."

This reverts commit 16b34824673f5a50d464727b8fad98470e5e984a.
Jing Zhao il y a 10 ans
Parent
commit
ba0a42cf67

+ 0 - 3
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -910,9 +910,6 @@ Release 2.6.0 - UNRELEASED
     HADOOP-11253. Hadoop streaming test TestStreamXmlMultipleRecords fails on
     HADOOP-11253. Hadoop streaming test TestStreamXmlMultipleRecords fails on
     Windows. (Varun Vasudev via wheat9)
     Windows. (Varun Vasudev via wheat9)
 
 
-    HADOOP-11274. ConcurrentModificationException in Configuration Copy Constructor.
-    (Junping Du via jing9)
-
     BREAKDOWN OF HDFS-6134 AND HADOOP-10150 SUBTASKS AND RELATED JIRAS
     BREAKDOWN OF HDFS-6134 AND HADOOP-10150 SUBTASKS AND RELATED JIRAS
   
   
       HADOOP-10734. Implement high-performance secure random number sources.
       HADOOP-10734. Implement high-performance secure random number sources.

+ 40 - 45
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java

@@ -690,26 +690,26 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
    */
    */
   @SuppressWarnings("unchecked")
   @SuppressWarnings("unchecked")
   public Configuration(Configuration other) {
   public Configuration(Configuration other) {
-    synchronized(other) {
-      this.resources = (ArrayList<Resource>) other.resources.clone();
-      if (other.properties != null) {
-        this.properties = (Properties)other.properties.clone();
-      }
-
-      if (other.overlay!=null) {
-        this.overlay = (Properties)other.overlay.clone();
-      }
-
-      this.updatingResource = new HashMap<String, String[]>(other.updatingResource);
-      this.finalParameters = new HashSet<String>(other.finalParameters);
-
-      this.classLoader = other.classLoader;
-      this.loadDefaults = other.loadDefaults;
-      setQuietMode(other.getQuietMode());
-    }
+   this.resources = (ArrayList<Resource>) other.resources.clone();
+   synchronized(other) {
+     if (other.properties != null) {
+       this.properties = (Properties)other.properties.clone();
+     }
+
+     if (other.overlay!=null) {
+       this.overlay = (Properties)other.overlay.clone();
+     }
+
+     this.updatingResource = new HashMap<String, String[]>(other.updatingResource);
+     this.finalParameters = new HashSet<String>(other.finalParameters);
+   }
+   
     synchronized(Configuration.class) {
     synchronized(Configuration.class) {
       REGISTRY.put(this, null);
       REGISTRY.put(this, null);
     }
     }
+    this.classLoader = other.classLoader;
+    this.loadDefaults = other.loadDefaults;
+    setQuietMode(other.getQuietMode());
   }
   }
   
   
   /**
   /**
@@ -1025,28 +1025,26 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
     getProps().setProperty(name, value);
     getProps().setProperty(name, value);
     String newSource = (source == null ? "programmatically" : source);
     String newSource = (source == null ? "programmatically" : source);
 
 
-    synchronized (this) {
-      if (!isDeprecated(name)) {
-        updatingResource.put(name, new String[] {newSource});
-        String[] altNames = getAlternativeNames(name);
-        if(altNames != null) {
-          for(String n: altNames) {
-            if(!n.equals(name)) {
-              getOverlay().setProperty(n, value);
-              getProps().setProperty(n, value);
-              updatingResource.put(n, new String[] {newSource});
-            }
+    if (!isDeprecated(name)) {
+      updatingResource.put(name, new String[] {newSource});
+      String[] altNames = getAlternativeNames(name);
+      if(altNames != null) {
+        for(String n: altNames) {
+          if(!n.equals(name)) {
+            getOverlay().setProperty(n, value);
+            getProps().setProperty(n, value);
+            updatingResource.put(n, new String[] {newSource});
           }
           }
         }
         }
       }
       }
-      else {
-        String[] names = handleDeprecation(deprecationContext.get(), name);
-        String altSource = "because " + name + " is deprecated";
-        for(String n : names) {
-          getOverlay().setProperty(n, value);
-          getProps().setProperty(n, value);
-          updatingResource.put(n, new String[] {altSource});
-        }
+    }
+    else {
+      String[] names = handleDeprecation(deprecationContext.get(), name);
+      String altSource = "because " + name + " is deprecated";
+      for(String n : names) {
+        getOverlay().setProperty(n, value);
+        getProps().setProperty(n, value);
+        updatingResource.put(n, new String[] {altSource});
       }
       }
     }
     }
   }
   }
@@ -2279,7 +2277,7 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
    *
    *
    * @return final parameter set.
    * @return final parameter set.
    */
    */
-  public synchronized Set<String> getFinalParameters() {
+  public Set<String> getFinalParameters() {
     return new HashSet<String>(finalParameters);
     return new HashSet<String>(finalParameters);
   }
   }
 
 
@@ -2542,18 +2540,14 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
     if (value != null) {
     if (value != null) {
       if (!finalParameters.contains(attr)) {
       if (!finalParameters.contains(attr)) {
         properties.setProperty(attr, value);
         properties.setProperty(attr, value);
-        synchronized(this) {
-          updatingResource.put(attr, source);
-        }
+        updatingResource.put(attr, source);
       } else if (!value.equals(properties.getProperty(attr))) {
       } else if (!value.equals(properties.getProperty(attr))) {
         LOG.warn(name+":an attempt to override final parameter: "+attr
         LOG.warn(name+":an attempt to override final parameter: "+attr
             +";  Ignoring.");
             +";  Ignoring.");
       }
       }
     }
     }
     if (finalParameter) {
     if (finalParameter) {
-      synchronized(this) {
-        finalParameters.add(attr);
-      }
+      finalParameters.add(attr);
     }
     }
   }
   }
 
 
@@ -2747,7 +2741,7 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
   }
   }
 
 
   @Override
   @Override
-  public synchronized void readFields(DataInput in) throws IOException {
+  public void readFields(DataInput in) throws IOException {
     clear();
     clear();
     int size = WritableUtils.readVInt(in);
     int size = WritableUtils.readVInt(in);
     for(int i=0; i < size; ++i) {
     for(int i=0; i < size; ++i) {
@@ -2759,8 +2753,9 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
     }
     }
   }
   }
 
 
+  //@Override
   @Override
   @Override
-  public synchronized void write(DataOutput out) throws IOException {
+  public void write(DataOutput out) throws IOException {
     Properties props = getProps();
     Properties props = getProps();
     WritableUtils.writeVInt(out, props.size());
     WritableUtils.writeVInt(out, props.size());
     for(Map.Entry<Object, Object> item: props.entrySet()) {
     for(Map.Entry<Object, Object> item: props.entrySet()) {