diff options
author | Erik Johnston <erik@matrix.org> | 2021-04-08 17:30:01 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2021-04-08 17:34:07 +0100 |
commit | 3a569fb2000e972efe2e145d57ffd9441ee41665 (patch) | |
tree | 61f9e04795cdc020c024a8d9e6216359ad5b2a67 /synapse/federation | |
parent | Record more information into structured logs. (#9654) (diff) | |
download | synapse-3a569fb2000e972efe2e145d57ffd9441ee41665.tar.xz |
Fix sharded federation sender sometimes using 100% CPU.
We pull all destinations requiring catchup from the DB in batches. However, if all those destinations get filtered out (due to the federation sender being sharded), then the `last_processed` destination doesn't get updated, and we keep requesting the same set repeatedly.
Diffstat (limited to 'synapse/federation')
-rw-r--r-- | synapse/federation/sender/__init__.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/synapse/federation/sender/__init__.py b/synapse/federation/sender/__init__.py index 98bfce22ff..d821dcbf6a 100644 --- a/synapse/federation/sender/__init__.py +++ b/synapse/federation/sender/__init__.py @@ -734,16 +734,18 @@ class FederationSender(AbstractFederationSender): self._catchup_after_startup_timer = None break + last_processed = destinations_to_wake[-1] + destinations_to_wake = [ d for d in destinations_to_wake if self._federation_shard_config.should_handle(self._instance_name, d) ] - for last_processed in destinations_to_wake: + for destination in destinations_to_wake: logger.info( "Destination %s has outstanding catch-up, waking up.", last_processed, ) - self.wake_destination(last_processed) + self.wake_destination(destination) await self.clock.sleep(CATCH_UP_STARTUP_INTERVAL_SEC) |