MAPREDUCE-3686. Fixed two bugs in Counters because of which web app displays zero counter values for framework counters. Contributed by Bhallamudi Venkata Siva Kamesh.
svn merge --ignore-ancestry -c 1293775 ../../trunk
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1293776 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/hadoop-mapreduce-project/CHANGES.txt b/hadoop-mapreduce-project/CHANGES.txt
index d6daeaa..c61278e 100644
--- a/hadoop-mapreduce-project/CHANGES.txt
+++ b/hadoop-mapreduce-project/CHANGES.txt
@@ -80,6 +80,10 @@
MAPREDUCE-3910. Fixed a bug in CapacityScheduler LeafQueue which was causing
app-submission to fail. (John George via vinodkv)
+
+ MAPREDUCE-3686. Fixed two bugs in Counters because of which web app displays
+ zero counter values for framework counters. (Bhallamudi Venkata Siva Kamesh
+ via vinodkv)
Release 0.23.1 - 2012-02-17
diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/counters/AbstractCounters.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/counters/AbstractCounters.java
index 73434ae..768f1c7 100644
--- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/counters/AbstractCounters.java
+++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/counters/AbstractCounters.java
@@ -326,12 +326,10 @@
*/
public synchronized void incrAllCounters(AbstractCounters<C, G> other) {
for(G right : other) {
- G left = groups.get(right.getName());
+ String groupName = right.getName();
+ G left = (isFrameworkGroup(groupName) ? fgroups : groups).get(groupName);
if (left == null) {
- limits.checkGroups(groups.size() + 1);
- left = groupFactory.newGroup(right.getName(), right.getDisplayName(),
- limits);
- groups.put(right.getName(), left);
+ left = addGroup(groupName, right.getDisplayName());
}
left.incrAllCounters(right);
}
diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/counters/CounterGroupFactory.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/counters/CounterGroupFactory.java
index a402f74..7f392f2 100644
--- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/counters/CounterGroupFactory.java
+++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/counters/CounterGroupFactory.java
@@ -107,6 +107,8 @@
if (gf != null) return gf.newGroup(name);
if (name.equals(FS_GROUP_NAME)) {
return newFileSystemGroup();
+ } else if (s2i.get(name) != null) {
+ return newFrameworkGroup(s2i.get(name));
}
return newGenericGroup(name, displayName, limits);
}
diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapreduce/TestCounters.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapreduce/TestCounters.java
index ccdf516d..7b85bd4 100644
--- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapreduce/TestCounters.java
+++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapreduce/TestCounters.java
@@ -70,6 +70,29 @@
testMaxGroups(new Counters());
}
}
+
+ @Test
+ public void testCountersIncrement() {
+ Counters fCounters = new Counters();
+ Counter fCounter = fCounters.findCounter(FRAMEWORK_COUNTER);
+ fCounter.setValue(100);
+ Counter gCounter = fCounters.findCounter("test", "foo");
+ gCounter.setValue(200);
+
+ Counters counters = new Counters();
+ counters.incrAllCounters(fCounters);
+ Counter counter;
+ for (CounterGroup cg : fCounters) {
+ CounterGroup group = counters.getGroup(cg.getName());
+ if (group.getName().equals("test")) {
+ counter = counters.findCounter("test", "foo");
+ assertEquals(200, counter.getValue());
+ } else {
+ counter = counters.findCounter(FRAMEWORK_COUNTER);
+ assertEquals(100, counter.getValue());
+ }
+ }
+ }
static final Enum<?> FRAMEWORK_COUNTER = TaskCounter.CPU_MILLISECONDS;
static final long FRAMEWORK_COUNTER_VALUE = 8;