mirror of
https://github.com/element-hq/synapse.git
synced 2026-09-09 20:25:49 +00:00
Grace period to wait for background updates to finish with synapse_port_db
Fix https://github.com/element-hq/synapse/issues/19298
This commit is contained in:
@@ -94,6 +94,7 @@ from synapse.storage.databases.state.bg_updates import StateBackgroundUpdateStor
|
||||
from synapse.storage.engines import create_engine
|
||||
from synapse.storage.prepare_database import prepare_database
|
||||
from synapse.types import ISynapseReactor
|
||||
from synapse.util.duration import Duration
|
||||
|
||||
# Cast safety: Twisted does some naughty magic which replaces the
|
||||
# twisted.internet.reactor module with a Reactor instance at runtime.
|
||||
@@ -233,6 +234,11 @@ IGNORED_BACKGROUND_UPDATES = {
|
||||
}
|
||||
|
||||
|
||||
STARTUP_BACKGROUND_UPDATE_GRACE_PERIOD = Duration(seconds=5)
|
||||
"""
|
||||
The ammount of time we will wait for background updates to complete before giving up.
|
||||
"""
|
||||
|
||||
# Error returned by the run function. Used at the top-level part of the script to
|
||||
# handle errors and return codes.
|
||||
end_error: str | None = None
|
||||
@@ -763,6 +769,23 @@ class Porter:
|
||||
)
|
||||
return
|
||||
|
||||
# Give a grace period of 5 seconds for any background tasks that get added
|
||||
# on startup to resolve themselves (like the ones added by
|
||||
# `_resolve_stale_data_in_sliding_sync_tables`)
|
||||
background_updates_done_check_start_time_seconds = (
|
||||
self.hs.get_clock().time()
|
||||
)
|
||||
while not await self.sqlite_store.db_pool.updates.has_completed_background_updates():
|
||||
if (
|
||||
self.hs.get_clock().time()
|
||||
- background_updates_done_check_start_time_seconds
|
||||
> STARTUP_BACKGROUND_UPDATE_GRACE_PERIOD.as_secs()
|
||||
):
|
||||
break
|
||||
|
||||
# Sleep to give a chance for the reactor to do other work
|
||||
await self.hs.get_clock().sleep(Duration(seconds=1))
|
||||
|
||||
# Check if all background updates are done, abort if not.
|
||||
updates_complete = await self.sqlite_store.db_pool.updates.has_completed_background_updates()
|
||||
if not updates_complete:
|
||||
|
||||
Reference in New Issue
Block a user