From f071323343c682ac17bf37d1cb3d1afb9c63641d Mon Sep 17 00:00:00 2001 From: Vinod Kumar Vavilapalli Date: Sun, 26 Feb 2012 08:32:30 +0000 Subject: [PATCH] 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. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1293775 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-mapreduce-project/CHANGES.txt | 4 ++++ .../mapreduce/counters/AbstractCounters.java | 8 +++---- .../counters/CounterGroupFactory.java | 2 ++ .../apache/hadoop/mapreduce/TestCounters.java | 23 +++++++++++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/hadoop-mapreduce-project/CHANGES.txt b/hadoop-mapreduce-project/CHANGES.txt index 37d533c70e3..1c72e1fbe51 100644 --- a/hadoop-mapreduce-project/CHANGES.txt +++ b/hadoop-mapreduce-project/CHANGES.txt @@ -174,6 +174,10 @@ Release 0.23.2 - UNRELEASED 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 73434ae9bdb..768f1c782e9 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 String toString() { */ public synchronized void incrAllCounters(AbstractCounters 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 a402f741085..7f392f2cb5d 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 @@ public G newGroup(String name, String displayName, Limits limits) { 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 ccdf516d18c..7b85bd40ba0 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 @@ public void testCounterValue() { 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;