HADOOP-11274. ConcurrentModificationException in Configuration Copy Constructor. Contributed by Junping Du.
This commit is contained in:
parent
c38c5752e4
commit
bc6bc80251
|
@ -496,6 +496,9 @@ 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.
|
||||||
|
|
|
@ -690,8 +690,8 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Configuration(Configuration other) {
|
public Configuration(Configuration other) {
|
||||||
this.resources = (ArrayList<Resource>) other.resources.clone();
|
|
||||||
synchronized(other) {
|
synchronized(other) {
|
||||||
|
this.resources = (ArrayList<Resource>) other.resources.clone();
|
||||||
if (other.properties != null) {
|
if (other.properties != null) {
|
||||||
this.properties = (Properties)other.properties.clone();
|
this.properties = (Properties)other.properties.clone();
|
||||||
}
|
}
|
||||||
|
@ -702,15 +702,15 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
|
||||||
|
|
||||||
this.updatingResource = new HashMap<String, String[]>(other.updatingResource);
|
this.updatingResource = new HashMap<String, String[]>(other.updatingResource);
|
||||||
this.finalParameters = new HashSet<String>(other.finalParameters);
|
this.finalParameters = new HashSet<String>(other.finalParameters);
|
||||||
}
|
|
||||||
|
|
||||||
synchronized(Configuration.class) {
|
|
||||||
REGISTRY.put(this, null);
|
|
||||||
}
|
|
||||||
this.classLoader = other.classLoader;
|
this.classLoader = other.classLoader;
|
||||||
this.loadDefaults = other.loadDefaults;
|
this.loadDefaults = other.loadDefaults;
|
||||||
setQuietMode(other.getQuietMode());
|
setQuietMode(other.getQuietMode());
|
||||||
}
|
}
|
||||||
|
synchronized(Configuration.class) {
|
||||||
|
REGISTRY.put(this, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a default resource. Resources are loaded in the order of the resources
|
* Add a default resource. Resources are loaded in the order of the resources
|
||||||
|
@ -1019,6 +1019,7 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
|
||||||
getProps().setProperty(name, value);
|
getProps().setProperty(name, value);
|
||||||
String newSource = (source == null ? "programatically" : source);
|
String newSource = (source == null ? "programatically" : source);
|
||||||
|
|
||||||
|
synchronized (this) {
|
||||||
if (!isDeprecated(name)) {
|
if (!isDeprecated(name)) {
|
||||||
updatingResource.put(name, new String[] {newSource});
|
updatingResource.put(name, new String[] {newSource});
|
||||||
String[] altNames = getAlternativeNames(name);
|
String[] altNames = getAlternativeNames(name);
|
||||||
|
@ -1042,6 +1043,7 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void warnOnceIfDeprecated(DeprecationContext deprecations, String name) {
|
private void warnOnceIfDeprecated(DeprecationContext deprecations, String name) {
|
||||||
DeprecatedKeyInfo keyInfo = deprecations.getDeprecatedKeyMap().get(name);
|
DeprecatedKeyInfo keyInfo = deprecations.getDeprecatedKeyMap().get(name);
|
||||||
|
@ -2269,7 +2271,7 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
|
||||||
*
|
*
|
||||||
* @return final parameter set.
|
* @return final parameter set.
|
||||||
*/
|
*/
|
||||||
public Set<String> getFinalParameters() {
|
public synchronized Set<String> getFinalParameters() {
|
||||||
return new HashSet<String>(finalParameters);
|
return new HashSet<String>(finalParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2532,16 +2534,20 @@ 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write out the non-default properties in this configuration to the given
|
* Write out the non-default properties in this configuration to the given
|
||||||
|
@ -2733,7 +2739,7 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFields(DataInput in) throws IOException {
|
public synchronized 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) {
|
||||||
|
@ -2745,9 +2751,8 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Override
|
|
||||||
@Override
|
@Override
|
||||||
public void write(DataOutput out) throws IOException {
|
public synchronized 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()) {
|
||||||
|
|
Loading…
Reference in New Issue