commit 894501335535e04668fb63f3aadd5f25c7318ebe Author: Damian Johnson atagar@torproject.org Date: Sun Feb 11 12:50:42 2018 -0800
Notify if flag count substantially differ
Recently dannenberg stopped issuing the Exit flag. Check Requested by nusenu...
https://lists.torproject.org/pipermail/tor-dev/2018-February/012918.html --- consensus_health_checker.py | 30 ++++++++++++++++++++++++++++++ data/consensus_health.cfg | 1 + 2 files changed, 31 insertions(+)
diff --git a/consensus_health_checker.py b/consensus_health_checker.py index 23f3f9d..e91e292 100755 --- a/consensus_health_checker.py +++ b/consensus_health_checker.py @@ -321,6 +321,7 @@ def run_checks(consensuses, votes): voting_bandwidth_scanners, #unmeasured_relays, has_authority_flag, + has_similar_flag_counts, is_recommended_versions, bad_exits_in_sync, bandwidth_authorities_in_sync, @@ -612,6 +613,35 @@ def has_authority_flag(latest_consensus, consensuses, votes): return issues
+def has_similar_flag_counts(latest_consensus, consensuses, votes): + "Checks that flags issued by authorities are similar." + + issues = [] + flag_count = {} # {flag => count} + + for desc in latest_consensus.routers.values(): + for flag in desc.flags: + flag_count[flag] = flag_count.setdefault(flag, 0) + 1 + + for authority, vote in votes.items(): + authority_flag_count = {} + + for desc in vote.routers.values(): + for flag in desc.flags: + authority_flag_count[flag] = authority_flag_count.setdefault(flag, 0) + 1 + + for flag, count in flag_count.items(): + if flag == 'BadExit': + continue + + vote_count = authority_flag_count.get(flag, 0) + + if vote_count > count * 1.5 or vote_count < count * 0.5: + issues.append(Issue(Runlevel.NOTICE, 'FLAG_COUNT_DIFFERS', authority = authority, flag = flag, consensus_count = count, vote_count = vote_count, to = [authority])) + + return issues + + def has_expected_fingerprints(latest_consensus, consensuses, votes): "Checks that the authorities have the fingerprints that we expect."
diff --git a/data/consensus_health.cfg b/data/consensus_health.cfg index 423ab6d..326aa20 100644 --- a/data/consensus_health.cfg +++ b/data/consensus_health.cfg @@ -14,6 +14,7 @@ msg TOO_MANY_UNMEASURED_RELAYS => As a bandwidth authority {authority} lacked a msg MISSING_VOTES => The consensuses downloaded from the following authorities are missing votes that are contained in consensuses downloaded from other authorities: {authorities} msg MISSING_AUTHORITIES => The following authorities are missing from the consensus: {authorities} msg EXTRA_AUTHORITIES => The following authorities were not expected in the consensus: {authorities} +msg FLAG_COUNT_DIFFERS => {authority} had {vote_count} {flag} flags in its vote but the consensus had {consensus_count} msg FINGERPRINT_MISMATCH => {authority} had a different fingerprint than we expected (expected: {expected}, actual: {actual}) msg TOR_OUT_OF_DATE => The following authorities are an out of date version of tor: {authorities} msg BADEXIT_OUT_OF_SYNC => Authorities disagree about the BadExit flag for {fingerprint} ({counts})
tor-commits@lists.torproject.org