summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2021-01-14 16:47:21 +0000
committerGitHub <noreply@github.com>2021-01-14 16:47:21 +0000
commit631dd06f2c7e9224602877d5bfcbca7695c4227e (patch)
tree56368521eaeadddf034f445391b54bbbe5a97e67
parentAdd background update for add chain cover index (#9029) (diff)
downloadsynapse-631dd06f2c7e9224602877d5bfcbca7695c4227e.tar.xz
Fix get destinations to catch up query. (#9114)
t was doing a sequential scan on `destination_rooms`, which took
minutes.
-rw-r--r--changelog.d/9114.bugfix1
-rw-r--r--synapse/storage/databases/main/transactions.py24
2 files changed, 12 insertions, 13 deletions
diff --git a/changelog.d/9114.bugfix b/changelog.d/9114.bugfix
new file mode 100644

index 0000000000..77112abd5c --- /dev/null +++ b/changelog.d/9114.bugfix
@@ -0,0 +1 @@ +Fix bug in federation catchup logic that caused outbound federation to be delayed for large servers after start up. Introduced in v1.21.0. diff --git a/synapse/storage/databases/main/transactions.py b/synapse/storage/databases/main/transactions.py
index 59207cadd4..cea595ff19 100644 --- a/synapse/storage/databases/main/transactions.py +++ b/synapse/storage/databases/main/transactions.py
@@ -464,19 +464,17 @@ class TransactionStore(TransactionWorkerStore): txn: LoggingTransaction, now_time_ms: int, after_destination: Optional[str] ) -> List[str]: q = """ - SELECT destination FROM destinations - WHERE destination IN ( - SELECT destination FROM destination_rooms - WHERE destination_rooms.stream_ordering > - destinations.last_successful_stream_ordering - ) - AND destination > ? - AND ( - retry_last_ts IS NULL OR - retry_last_ts + retry_interval < ? - ) - ORDER BY destination - LIMIT 25 + SELECT DISTINCT destination FROM destinations + INNER JOIN destination_rooms USING (destination) + WHERE + stream_ordering > last_successful_stream_ordering + AND destination > ? + AND ( + retry_last_ts IS NULL OR + retry_last_ts + retry_interval < ? + ) + ORDER BY destination + LIMIT 25 """ txn.execute( q,