瀏覽代碼

HADOOP-8866. SampleQuantiles#query is O(N^2) instead of O(N). Contributed by Andrew Wang.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1391712 13f79535-47bb-0310-9956-ffa450edef68
Aaron Myers 12 年之前
父節點
當前提交
288e052acd

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

@@ -27,6 +27,9 @@ Release 2.0.3-alpha - Unreleased
 
 
   OPTIMIZATIONS
   OPTIMIZATIONS
 
 
+    HADOOP-8866. SampleQuantiles#query is O(N^2) instead of O(N). (Andrew Wang
+    via atm)
+
   BUG FIXES
   BUG FIXES
 
 
     HADOOP-8795. BASH tab completion doesn't look in PATH, assumes path to
     HADOOP-8795. BASH tab completion doesn't look in PATH, assumes path to

+ 5 - 2
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/util/SampleQuantiles.java

@@ -210,9 +210,12 @@ public class SampleQuantiles {
     int rankMin = 0;
     int rankMin = 0;
     int desired = (int) (quantile * count);
     int desired = (int) (quantile * count);
 
 
+    ListIterator<SampleItem> it = samples.listIterator();
+    SampleItem prev = null;
+    SampleItem cur = it.next();
     for (int i = 1; i < samples.size(); i++) {
     for (int i = 1; i < samples.size(); i++) {
-      SampleItem prev = samples.get(i - 1);
-      SampleItem cur = samples.get(i);
+      prev = cur;
+      cur = it.next();
 
 
       rankMin += prev.g;
       rankMin += prev.g;