ソースを参照

MAPREDUCE-5905. CountersStrings.toEscapedCompactStrings outputs unnecessary null strings. Contributed by Akira AJISAKA.

Tsuyoshi Ozawa 10 年 前
コミット
3ba18362f2

+ 3 - 0
hadoop-mapreduce-project/CHANGES.txt

@@ -359,6 +359,9 @@ Release 2.8.0 - UNRELEASED
     MAPREDUCE-6345. Documentation fix for when CRLA is enabled for MRAppMaster
     logs. (Rohit Agarwal via gera)
 
+    MAPREDUCE-5905. CountersStrings.toEscapedCompactStrings outputs
+    unnecessary "null" strings. (Akira AJISAKA via ozawa)
+
 Release 2.7.1 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 2 - 15
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/util/CountersStrings.java

@@ -151,25 +151,12 @@ public class CountersStrings {
   public static <C extends Counter, G extends CounterGroupBase<C>,
                  T extends AbstractCounters<C, G>>
   String toEscapedCompactString(T counters) {
-    String[] groupsArray;
-    int length = 0;
+    StringBuilder builder = new StringBuilder();
     synchronized(counters) {
-      groupsArray = new String[counters.countCounters()];
-      int i = 0;
-      // First up, obtain the escaped string for each group so that we can
-      // determine the buffer length apriori.
       for (G group : counters) {
-        String escapedString = toEscapedCompactString(group);
-        groupsArray[i++] = escapedString;
-        length += escapedString.length();
+        builder.append(toEscapedCompactString(group));
       }
     }
-
-    // Now construct the buffer
-    StringBuilder builder = new StringBuilder(length);
-    for (String group : groupsArray) {
-      builder.append(group);
-    }
     return builder.toString();
   }
 

+ 3 - 0
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/test/java/org/apache/hadoop/mapred/TestCounters.java

@@ -18,6 +18,7 @@
 package org.apache.hadoop.mapred;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -84,6 +85,8 @@ public class TestCounters {
    */
   private void testCounter(Counters counter) throws ParseException {
     String compactEscapedString = counter.makeEscapedCompactString();
+    assertFalse("compactEscapedString should not contain null",
+                compactEscapedString.contains("null"));
     
     Counters recoveredCounter = 
       Counters.fromEscapedCompactString(compactEscapedString);