Fix logging context misuse when we fail to persist a federation event (#13089)
When we fail to persist a federation event, we kick off a task to remove its push actions in the background, using the current logging context. Since we don't `await` that task, we may finish our logging context before the task finishes. There's no reason to not `await` the task, so let's do that. Signed-off-by: Sean Quah <seanq@matrix.org>
This commit is contained in:
parent
8ceed5e6b5
commit
9372f6f842
|
@ -0,0 +1 @@
|
|||
Fix a long-standing bug where a finished logging context would be re-started when Synapse failed to persist an event from federation.
|
|
@ -57,7 +57,7 @@ from synapse.event_auth import (
|
|||
from synapse.events import EventBase
|
||||
from synapse.events.snapshot import EventContext
|
||||
from synapse.federation.federation_client import InvalidResponseError
|
||||
from synapse.logging.context import nested_logging_context, run_in_background
|
||||
from synapse.logging.context import nested_logging_context
|
||||
from synapse.metrics.background_process_metrics import run_as_background_process
|
||||
from synapse.replication.http.devices import ReplicationUserDevicesResyncRestServlet
|
||||
from synapse.replication.http.federation import (
|
||||
|
@ -1964,9 +1964,7 @@ class FederationEventHandler:
|
|||
event.room_id, [(event, context)], backfilled=backfilled
|
||||
)
|
||||
except Exception:
|
||||
run_in_background(
|
||||
self._store.remove_push_actions_from_staging, event.event_id
|
||||
)
|
||||
await self._store.remove_push_actions_from_staging(event.event_id)
|
||||
raise
|
||||
|
||||
async def persist_events_and_notify(
|
||||
|
|
Loading…
Reference in New Issue