diff --git a/lib/exabgp/rib/cache.py b/lib/exabgp/rib/cache.py index 10814b195..143fa07c2 100644 --- a/lib/exabgp/rib/cache.py +++ b/lib/exabgp/rib/cache.py @@ -29,14 +29,14 @@ def delete_cached_family(self, families): if family not in families: del self._seen[family] - def cached_changes(self, families=None): + def cached_changes(self, families=None, actions=[OUT.ANNOUNCE]): # families can be None or [] requested_families = self.families if families is None else set(families).intersection(self.families) # we use list() to make a snapshot of the data at the time we run the command for family in requested_families: for change in self._seen.get(family, {}).values(): - if change.nlri.action == OUT.ANNOUNCE: + if change.nlri.action in actions: yield change def is_cached(self, change): diff --git a/lib/exabgp/rib/outgoing.py b/lib/exabgp/rib/outgoing.py index 64d20d48e..444ff881f 100644 --- a/lib/exabgp/rib/outgoing.py +++ b/lib/exabgp/rib/outgoing.py @@ -89,7 +89,7 @@ def withdraw(self, families, enhanced_refresh): if family not in self._enhanced_refresh_start: self._enhanced_refresh_start.append(family) - changes = list(self.cached_changes(requested_families)) + changes = list(self.cached_changes(requested_families, [OUT.ANNOUNCE,OUT.WITHDRAW])) for change in changes: self.del_from_rib(change)