commit 1586ad248bf0ce994bcdb1ffe0261bb829ac59ee Author: Damian Johnson atagar@torproject.org Date: Mon Sep 30 14:55:03 2013 -0700
Don't drop relays with identical nicknames
When our sybil checker sends notifications it sorts the relays by their nickname. To do this I constructed a 'nickname => descriptor' hash, but I forgot nicknames are not always unique. Actually, they very frequently aren't due to Unnamed entries.
Constructing a 'nickname => [list of descriptors]' hash instead. Caught by Linus when yatei had an outage since we claimed 60 new relays but only listed 34. --- sybil_checker.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/sybil_checker.py b/sybil_checker.py index 56f344f..af7c39e 100755 --- a/sybil_checker.py +++ b/sybil_checker.py @@ -62,14 +62,19 @@ def main():
def send_email(new_relays): - # constructs a mapping of nicknames to router status entries so we can provide a listing that's sorted by nicknames + # Constructs a mapping of nicknames to router status entries so we can + # provide a listing that's sorted by nicknames. + + nickname_to_relay = {} + + for entry in new_relays: + nickname_to_relay.setdefault(entry.nickname, []).append(entry)
- nickname_to_relay = dict((entry.nickname, entry) for entry in new_relays) relay_entries = []
for nickname in sorted(nickname_to_relay.keys()): - relay = nickname_to_relay[nickname] - relay_entries.append(RELAY_ENTRY % (relay.nickname, relay.fingerprint, relay.address, relay.or_port, relay.version, relay.exit_policy)) + for relay in nickname_to_relay[nickname]: + relay_entries.append(RELAY_ENTRY % (relay.nickname, relay.fingerprint, relay.address, relay.or_port, relay.version, relay.exit_policy))
try: body = EMAIL_BODY % len(new_relays)
tor-commits@lists.torproject.org