فهرست منبع

HADOOP-13368. DFSOpsCountStatistics$OpType#fromSymbol and s3a.Statistic#fromSymbol should be O(1) operation. Contributed by Mingliang Liu.

Jitendra Pandey 8 سال پیش
والد
کامیت
a363277be5

+ 10 - 8
hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSOpsCountStatistics.java

@@ -21,6 +21,7 @@ import org.apache.hadoop.fs.StorageStatistics;
 import org.apache.hadoop.hdfs.protocol.HdfsConstants;
 
 import java.util.EnumMap;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -88,6 +89,14 @@ public class DFSOpsCountStatistics extends StorageStatistics {
     TRUNCATE(CommonStatisticNames.OP_TRUNCATE),
     UNSET_STORAGE_POLICY("op_unset_storage_policy");
 
+    private static final Map<String, OpType> SYMBOL_MAP =
+        new HashMap<>(OpType.values().length);
+    static {
+      for (OpType opType : values()) {
+        SYMBOL_MAP.put(opType.getSymbol(), opType);
+      }
+    }
+
     private final String symbol;
 
     OpType(String symbol) {
@@ -99,14 +108,7 @@ public class DFSOpsCountStatistics extends StorageStatistics {
     }
 
     public static OpType fromSymbol(String symbol) {
-      if (symbol != null) {
-        for (OpType opType : values()) {
-          if (opType.getSymbol().equals(symbol)) {
-            return opType;
-          }
-        }
-      }
-      return null;
+      return SYMBOL_MAP.get(symbol);
     }
   }
 

+ 2 - 0
hadoop-hdfs-project/hadoop-hdfs-client/src/test/java/org/apache/hadoop/hdfs/TestDFSOpsCountStatistics.java

@@ -111,12 +111,14 @@ public class TestDFSOpsCountStatistics {
 
   @Test
   public void testGetLong() {
+    assertNull(statistics.getLong(null));
     assertNull(statistics.getLong(NO_SUCH_OP));
     verifyStatistics();
   }
 
   @Test
   public void testIsTracked() {
+    assertFalse(statistics.isTracked(null));
     assertFalse(statistics.isTracked(NO_SUCH_OP));
 
     final Iterator<LongStatistic> iter = statistics.getLongStatistics();

+ 12 - 8
hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/Statistic.java

@@ -20,6 +20,9 @@ package org.apache.hadoop.fs.s3a;
 
 import org.apache.hadoop.fs.StorageStatistics.CommonStatisticNames;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Statistic which are collected in S3A.
  * These statistics are available at a low level in {@link S3AStorageStatistics}
@@ -105,6 +108,14 @@ public enum Statistic {
   STREAM_ABORT_BYTES_DISCARDED("stream_bytes_discarded_in_abort",
       "Count of bytes discarded by aborting the stream");
 
+  private static final Map<String, Statistic> SYMBOL_MAP =
+      new HashMap<>(Statistic.values().length);
+  static {
+    for (Statistic stat : values()) {
+      SYMBOL_MAP.put(stat.getSymbol(), stat);
+    }
+  }
+
   Statistic(String symbol, String description) {
     this.symbol = symbol;
     this.description = description;
@@ -123,14 +134,7 @@ public enum Statistic {
    * @return the value or null.
    */
   public static Statistic fromSymbol(String symbol) {
-    if (symbol != null) {
-      for (Statistic opType : values()) {
-        if (opType.getSymbol().equals(symbol)) {
-          return opType;
-        }
-      }
-    }
-    return null;
+    return SYMBOL_MAP.get(symbol);
   }
 
   public String getDescription() {