commit 8dfabbe36d5f90e2df14b504461298b1585fd5ae Author: iwakeh iwakeh@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; } }