Skip to content
This repository has been archived by the owner on Feb 9, 2021. It is now read-only.

Commit

Permalink
Merge -r 1335196:1335197 from trunk to branch-2. Fixes: MAPREDUCE-4226
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1335198 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
tomwhite committed May 7, 2012
1 parent 0c41923 commit b408214
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 1 deletion.
3 changes: 3 additions & 0 deletions hadoop-mapreduce-project/CHANGES.txt
Expand Up @@ -352,6 +352,9 @@ Release 0.23.3 - UNRELEASED
MAPREDUCE-4220. RM apps page starttime/endtime sorts are incorrect
(Jonathan Eagles via bobby)

MAPREDUCE-4226. ConcurrentModificationException in FileSystemCounterGroup.
(tomwhite)

Release 0.23.2 - UNRELEASED

INCOMPATIBLE CHANGES
Expand Down
Expand Up @@ -23,6 +23,7 @@
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
Expand Down Expand Up @@ -54,7 +55,8 @@ public abstract class FileSystemCounterGroup<C extends Counter>

// C[] would need Array.newInstance which requires a Class<C> reference.
// 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 static final Joiner NAME_JOINER = Joiner.on('_');
Expand Down
Expand Up @@ -18,6 +18,7 @@
package org.apache.hadoop.mapred;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.text.ParseException;
Expand Down Expand Up @@ -203,6 +204,25 @@ public void testGroupIteratorConcurrency() {
counters.incrCounter("group1", "counter2", 1);
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 {
new TestCounters().testCounters();
Expand Down

0 comments on commit b408214

Please sign in to comment.