[tor-commits] [onionoo/master] Return results in deterministic order.

karsten at torproject.org karsten at torproject.org
Tue Mar 13 15:40:26 UTC 2018


commit 8dfabbe36d5f90e2df14b504461298b1585fd5ae
Author: iwakeh <iwakeh at torproject.org>
Date:   Wed Dec 20 16:16:03 2017 +0000

    Return results in deterministic order.
    
    Part of task-25002.
---
 CHANGELOG.md                                                   |  5 +++++
 .../java/org/torproject/onionoo/server/RequestHandler.java     | 10 ++++------
 .../torproject/onionoo/server/SummaryDocumentComparator.java   |  6 +++++-
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index d0fed40..fa33c82 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,11 @@
  * Medium changes
    - Stop omitting "n" in summary docs for "Unnamed" relays/bridges.
 
+ * Minor changes
+   - Make responses deterministic by always sorting results by
+     fingerprint, either if no specific order was requested or to
+     break ties after ordering results as requested.
+
 
 # Changes in version 5.0-1.10.1 - 2018-02-07
 
diff --git a/src/main/java/org/torproject/onionoo/server/RequestHandler.java b/src/main/java/org/torproject/onionoo/server/RequestHandler.java
index 55938c5..63b8fe9 100644
--- a/src/main/java/org/torproject/onionoo/server/RequestHandler.java
+++ b/src/main/java/org/torproject/onionoo/server/RequestHandler.java
@@ -603,12 +603,10 @@ public class RequestHandler {
         uniqueBridges.add(bridge);
       }
     }
-    if (this.order != null) {
-      Comparator<SummaryDocument> comparator
-          = new SummaryDocumentComparator(this.order);
-      Collections.sort(uniqueRelays, comparator);
-      Collections.sort(uniqueBridges, comparator);
-    }
+    Comparator<SummaryDocument> comparator
+        = new SummaryDocumentComparator(this.order);
+    Collections.sort(uniqueRelays, comparator);
+    Collections.sort(uniqueBridges, comparator);
     this.orderedRelays.addAll(uniqueRelays);
     this.orderedBridges.addAll(uniqueBridges);
   }
diff --git a/src/main/java/org/torproject/onionoo/server/SummaryDocumentComparator.java b/src/main/java/org/torproject/onionoo/server/SummaryDocumentComparator.java
index 0e6729b..86d4d32 100644
--- a/src/main/java/org/torproject/onionoo/server/SummaryDocumentComparator.java
+++ b/src/main/java/org/torproject/onionoo/server/SummaryDocumentComparator.java
@@ -13,7 +13,8 @@ public class SummaryDocumentComparator implements Comparator<SummaryDocument> {
 
   /** Comparator is initialized with the order parameters. */
   public SummaryDocumentComparator(String ... orderParameters) {
-    this.orderParameters = orderParameters;
+    this.orderParameters
+        = null == orderParameters ? new String[]{} : orderParameters;
   }
 
   @Override
@@ -45,6 +46,9 @@ public class SummaryDocumentComparator implements Comparator<SummaryDocument> {
         break;
       }
     }
+    if (0 == result) {
+      result = o1.getFingerprint().compareTo(o2.getFingerprint());
+    }
     return result;
   }
 }



More information about the tor-commits mailing list