MAPREDUCE-4226. ConcurrentModificationException in FileSystemCounterGroup.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1335197 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
eca2c850a5
commit
55cd161a35
|
@ -461,6 +461,9 @@ Release 0.23.3 - UNRELEASED
|
||||||
MAPREDUCE-4220. RM apps page starttime/endtime sorts are incorrect
|
MAPREDUCE-4220. RM apps page starttime/endtime sorts are incorrect
|
||||||
(Jonathan Eagles via bobby)
|
(Jonathan Eagles via bobby)
|
||||||
|
|
||||||
|
MAPREDUCE-4226. ConcurrentModificationException in FileSystemCounterGroup.
|
||||||
|
(tomwhite)
|
||||||
|
|
||||||
Release 0.23.2 - UNRELEASED
|
Release 0.23.2 - UNRELEASED
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.io.DataOutput;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
import java.util.concurrent.ConcurrentSkipListMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -54,7 +55,8 @@ public abstract class FileSystemCounterGroup<C extends Counter>
|
||||||
|
|
||||||
// C[] would need Array.newInstance which requires a Class<C> reference.
|
// C[] would need Array.newInstance which requires a Class<C> reference.
|
||||||
// Just a few local casts probably worth not having to carry it around.
|
// Just a few local casts probably worth not having to carry it around.
|
||||||
private final Map<String, Object[]> map = Maps.newTreeMap();
|
private final Map<String, Object[]> map =
|
||||||
|
new ConcurrentSkipListMap<String, Object[]>();
|
||||||
private String displayName;
|
private String displayName;
|
||||||
|
|
||||||
private static final Joiner NAME_JOINER = Joiner.on('_');
|
private static final Joiner NAME_JOINER = Joiner.on('_');
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
package org.apache.hadoop.mapred;
|
package org.apache.hadoop.mapred;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
|
@ -204,6 +205,25 @@ public class TestCounters {
|
||||||
iterator.next();
|
iterator.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFileSystemGroupIteratorConcurrency() {
|
||||||
|
Counters counters = new Counters();
|
||||||
|
// create 2 filesystem counter groups
|
||||||
|
counters.findCounter("fs1", FileSystemCounter.BYTES_READ).increment(1);
|
||||||
|
counters.findCounter("fs2", FileSystemCounter.BYTES_READ).increment(1);
|
||||||
|
|
||||||
|
// Iterate over the counters in this group while updating counters in
|
||||||
|
// the group
|
||||||
|
Group group = counters.getGroup(FileSystemCounter.class.getName());
|
||||||
|
Iterator<Counter> iterator = group.iterator();
|
||||||
|
counters.findCounter("fs3", FileSystemCounter.BYTES_READ).increment(1);
|
||||||
|
assertTrue(iterator.hasNext());
|
||||||
|
iterator.next();
|
||||||
|
counters.findCounter("fs3", FileSystemCounter.BYTES_READ).increment(1);
|
||||||
|
assertTrue(iterator.hasNext());
|
||||||
|
iterator.next();
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
new TestCounters().testCounters();
|
new TestCounters().testCounters();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue