[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [doctor/master] resolve ticket 32842
commit 5303c453120378be89c478ce1cc40db5302c44ec
Author: Starlight <starlight@xxxxxxxxxxx>
Date: Sat Dec 28 14:51:19 2019 -0500
resolve ticket 32842
replace hard coded exclusion of authority tor26 with three
lists that during checks determine which authorities to not
a) check reachability for
b) check presence in consensus for
c) request and validate documents from
correct defect where router-line IPv4 OR address was not
checked for reachability
eliminate Python 3 exception by truncating array index
expression result to integer (further 2to3 revisions
applied during testing but not committed)
---
consensus_health_checker.py | 27 ++++++++++++++++++++-------
descriptor_checker.py | 8 ++++++--
2 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/consensus_health_checker.py b/consensus_health_checker.py
index eb4620c..cb512b0 100755
--- a/consensus_health_checker.py
+++ b/consensus_health_checker.py
@@ -26,7 +26,12 @@ from stem.util.lru_cache import lru_cache
Runlevel = stem.util.enum.UppercaseEnum('NOTICE', 'WARNING', 'ERROR')
DIRECTORY_AUTHORITIES = stem.directory.Authority.from_cache()
-del DIRECTORY_AUTHORITIES['tor26'] # DirPort does not service requests without a '.z' suffix
+
+DIRAUTH_SKIP_REACHABLE = ()
+DIRAUTH_SKIP_SEEN = ()
+DIRAUTH_SKIP_CHECKS = (
+ 'tor26' # tor26 DirPort does not service requests without a .z suffix
+)
EMAIL_SUBJECT = 'Consensus issues'
BANDWIDTH_AUTHORITIES = ('moria1', 'gabelmoo', 'maatuska', 'Faravahar', 'bastet', 'longclaw')
@@ -636,10 +641,8 @@ def has_authority_flag(latest_consensus, consensuses, votes):
for desc in latest_consensus.routers.values():
if Flag.AUTHORITY in desc.flags:
- seen_authorities.add(desc.nickname)
-
- if 'tor26' in seen_authorities:
- seen_authorities.remove('tor26')
+ if not desc.nickname in DIRAUTH_SKIP_SEEN:
+ seen_authorities.add(desc.nickname)
known_authorities = set(DIRECTORY_AUTHORITIES.keys())
missing_authorities = known_authorities.difference(seen_authorities)
@@ -823,9 +826,15 @@ def is_orport_reachable(latest_consensus, consensuses, votes):
if not desc:
continue # authority isn't in the consensus
+ if authority.nickname in DIRAUTH_SKIP_REACHABLE:
+ continue # reachability of authority impaired
+
+ issue = util.check_reachability(desc.address, desc.or_port)
+ if issue:
+ issues.append(Issue(Runlevel.WARNING, 'UNABLE_TO_REACH_ORPORT', authority = authority.nickname, address = desc.address, port = desc.or_port, error = issue, to = [authority]))
+
for address, port, is_ipv6 in desc.or_addresses:
issue = util.check_reachability(address, port)
-
if issue:
issues.append(Issue(Runlevel.WARNING, 'UNABLE_TO_REACH_ORPORT', authority = authority.nickname, address = address, port = port, error = issue, to = [authority]))
@@ -956,9 +965,13 @@ def _get_documents(label, resource):
documents, times_taken, clock_skew, issues = {}, {}, {}, []
for authority in DIRECTORY_AUTHORITIES.values():
+
if authority.v3ident is None:
continue # not a voting authority
+ if authority.nickname in DIRAUTH_SKIP_CHECKS:
+ continue # checking of authority impaired
+
query = downloader.query(
resource,
endpoints = [(authority.address, authority.dir_port)],
@@ -976,7 +989,7 @@ def _get_documents(label, resource):
issues.append(Issue(Runlevel.ERROR, 'AUTHORITY_UNAVAILABLE', fetch_type = label, authority = authority.nickname, url = query.download_url, error = exc, to = [authority.nickname]))
if label == 'consensus' and times_taken:
- median_time = sorted(times_taken.values())[len(times_taken) / 2]
+ median_time = sorted(times_taken.values())[int(len(times_taken) / 2)]
authority_times = ', '.join(['%s => %0.1fs' % (authority, time_taken) for authority, time_taken in times_taken.items()])
for nickname, time_taken in times_taken.items():
diff --git a/descriptor_checker.py b/descriptor_checker.py
index 1d464f8..a0f5db3 100755
--- a/descriptor_checker.py
+++ b/descriptor_checker.py
@@ -29,6 +29,10 @@ time: %s
error: %s
"""
+DIRAUTH_SKIP_CHECKS = (
+ 'tor26' # tor26 DirPort does not service requests without a .z suffix
+)
+
log = util.get_logger('descriptor_checker')
util.log_stem_debugging('descriptor_checker')
@@ -65,8 +69,8 @@ def main():
for authority in stem.directory.Authority.from_cache().values():
if authority.v3ident is None:
continue # authority doesn't vote in the consensus
- elif authority.nickname == 'tor26':
- continue # DirPort doesn't accept requests without a .z suffix
+ elif authority.nickname in DIRAUTH_SKIP_CHECKS:
+ continue # checking of authority impaired
log.debug("Downloading the consensus from %s..." % authority.nickname)
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits