Browse Source

HADOOP-12588. Fix intermittent test failure of TestGangliaMetrics. Contributed by Masatake Iwasaki.

(cherry picked from commit bd5e207432c54cc75fd8c040e232241678987e53)
(cherry picked from commit e06c291245902a6014770134443140eb78048240)
Akira Ajisaka 9 years ago
parent
commit
eed00804a7

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

@@ -36,6 +36,9 @@ Release 2.7.3 - UNRELEASED
     HADOOP-12602. TestMetricsSystemImpl#testQSize occasionally fails.
     (Masatake Iwasaki via aajisaka)
 
+    HADOOP-12588. Fix intermittent test failure of TestGangliaMetrics.
+    (Masatake Iwasaki via aajisaka)
+
 Release 2.7.2 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 6 - 4
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestGangliaMetrics.java

@@ -29,7 +29,9 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 
+import org.apache.commons.io.Charsets;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.metrics2.AbstractMetric;
@@ -145,7 +147,7 @@ public class TestGangliaMetrics {
   private void checkMetrics(List<byte[]> bytearrlist, int expectedCount) {
     boolean[] foundMetrics = new boolean[expectedMetrics.length];
     for (byte[] bytes : bytearrlist) {
-      String binaryStr = new String(bytes);
+      String binaryStr = new String(bytes, Charsets.UTF_8);
       for (int index = 0; index < expectedMetrics.length; index++) {
         if (binaryStr.indexOf(expectedMetrics[index]) >= 0) {
           foundMetrics[index] = true;
@@ -188,13 +190,13 @@ public class TestGangliaMetrics {
    * hence all the captured byte arrays were pointing to one instance.
    */
   private class MockDatagramSocket extends DatagramSocket {
-    private ArrayList<byte[]> capture;
+    private List<byte[]> capture;
 
     /**
      * @throws SocketException
      */
     public MockDatagramSocket() throws SocketException {
-      capture = new  ArrayList<byte[]>();
+      capture = new CopyOnWriteArrayList<byte[]>();
     }
 
     /* (non-Javadoc)
@@ -211,7 +213,7 @@ public class TestGangliaMetrics {
     /**
      * @return the captured byte arrays
      */
-    ArrayList<byte[]> getCapturedSend() {
+    List<byte[]> getCapturedSend() {
       return capture;
     }
   }