[tor-commits] [sbws/master] Merge branch 'maint-1.1_bug30733_fetch_early_descriptors' into maint-1.1

juga at torproject.org juga at torproject.org
Sun Feb 9 19:15:14 UTC 2020


commit 05bb23c5718cac8bffa105f88447c6ad4e87731b
Merge: f01a6fe 5986d25
Author: juga0 <juga at riseup.net>
Date:   Sun Feb 9 19:08:29 2020 +0000

    Merge branch 'maint-1.1_bug30733_fetch_early_descriptors' into maint-1.1

 sbws/globals.py       |  8 ++++++++
 sbws/lib/relaylist.py | 26 +++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --cc sbws/lib/relaylist.py
index 19c5073,6fa233c..8069854
--- a/sbws/lib/relaylist.py
+++ b/sbws/lib/relaylist.py
@@@ -289,11 -288,17 +289,22 @@@ class Relay
              self.relay_recent_priority_list_count = 0
          self.relay_recent_priority_list_count += 1
  
 +    def is_old(self):
 +        """Whether the last consensus seen for this relay is older than the
 +        measurement period.
 +        """
 +        return timestamp.is_old(self.last_consensus_timestamp)
+     # 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:
@@@ -439,21 -438,27 +450,34 @@@
          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,
 -        # it won't get stored, so its previous consensuses are lost,
 -        # but probably this is fine for now to don't make it more complicated.
 +            # If the relay is not in the current consensus but is not "old"
 +            # yet, add it to the new list of relays too, though its timestamp,
 +            # router status and descriptor can't be updated.
 +            elif not r.is_old(self._measurements_period):
 +                new_relays.append(r)
 +            # Otherwise, don't add it to the new list of relays.
 +            # For debugging, count the old relays that will be discarded.
 +            else:
 +                num_old_relays += 1
 +
 +        # Finally, add the relays that were not in the previous consensus
          for fp, ns in new_relays_dict.items():
              r = Relay(ns.fingerprint, c, ns=ns, timestamp=timestamp)
              new_relays.append(r)





More information about the tor-commits mailing list