diff options
author | Erik Johnston <erik@matrix.org> | 2018-02-15 15:37:40 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2018-02-15 15:47:06 +0000 |
commit | b96278d6fe499e47133d2d2e82b9d3a0074d7005 (patch) | |
tree | 8296465c2af1f3e06734427c793772fc623dfae3 /synapse | |
parent | Remove context.push_actions (diff) | |
download | synapse-b96278d6fe499e47133d2d2e82b9d3a0074d7005.tar.xz |
Ensure that we delete staging push actions on errors
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/handlers/message.py | 12 | ||||
-rw-r--r-- | synapse/storage/event_push_actions.py | 16 |
2 files changed, 25 insertions, 3 deletions
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index 1c3ac03f20..d99d8049b3 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -683,9 +683,15 @@ class EventCreationHandler(object): event, context ) - (event_stream_id, max_stream_id) = yield self.store.persist_event( - event, context=context - ) + try: + (event_stream_id, max_stream_id) = yield self.store.persist_event( + event, context=context + ) + except: # noqa: E722, as we reraise the exception this is fine. + # Ensure that we actually remove the entries in the push actions + # staging area + preserve_fn(self.store.remove_push_actions_from_staging)(event.event_id) + raise # this intentionally does not yield: we don't care about the result # and don't need to wait for it. diff --git a/synapse/storage/event_push_actions.py b/synapse/storage/event_push_actions.py index 34ff9be731..28226455bf 100644 --- a/synapse/storage/event_push_actions.py +++ b/synapse/storage/event_push_actions.py @@ -782,6 +782,22 @@ class EventPushActionsStore(SQLBaseStore): desc="add_push_actions_to_staging", ) + def remove_push_actions_from_staging(self, event_id): + """Called if we failed to persist the event to ensure that stale push + actions don't build up in the DB + + Args: + event_id (str) + """ + + return self._simple_delete( + table="event_push_actions_staging", + keyvalues={ + "event_id": event_id, + }, + desc="remove_push_actions_from_staging", + ) + def _action_has_highlight(actions): for action in actions: |