commit 5986d257ac3fceee48df503adb30228adf6d401a Author: juga0 juga@riseup.net Date: Sun Jan 26 20:48:24 2020 +0000
fix: relaylist: Update the relays' descriptors
when fetching new consensuses.
Part of #30733. --- sbws/lib/relaylist.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/sbws/lib/relaylist.py b/sbws/lib/relaylist.py index 6ddf44a..6fa233c 100644 --- a/sbws/lib/relaylist.py +++ b/sbws/lib/relaylist.py @@ -288,6 +288,17 @@ class Relay: self.relay_recent_priority_list_count = 0 self.relay_recent_priority_list_count += 1
+ # XXX: tech-debt: replace `_desc` attr by a a `dequee` of the last + # descriptors seen for this relay and the timestamp. + def update_server_descriptor(self, server_descriptor): + """Update this relay server descriptor (from the consensus.""" + self._desc = server_descriptor + + # XXX: tech-debt: replace `_ns` attr by a a `dequee` of the last + # router statuses seen for this relay and the timestampt. + def update_router_status(self, router_status): + """Update this relay router status (from the consensus).""" + self._ns = router_status
class RelayList: @@ -427,9 +438,22 @@ class RelayList: relays = copy.deepcopy(self._relays) for r in relays: if r.fingerprint in new_relays_dict.keys(): + # If a relay in the previous consensus and is in the current + # one, update its timestamp, router status and descriptor. + fp = r.fingerprint r.update_consensus_timestamps(timestamp) - new_relays_dict.pop(r.fingerprint) + # new_relays_dict[fp] is the router status. + r.update_router_status(new_relays_dict[fp]) + try: + descriptor = c.get_server_descriptor(fp, default=None) + except (DescriptorUnavailable, ControllerError) as e: + log.exception("Exception trying to get desc %s", e) + r.update_server_descriptor(descriptor) + # Add it to the new list of relays. new_relays.append(r) + # And remove it from the new consensus dict, as it has + # already added to the new list. + new_relays_dict.pop(fp)
# Add the relays that were not in the previous consensus # If there was an relay in some older previous consensus,
tor-commits@lists.torproject.org