From a353d4f17a7ce4d27025fafdcd82778261a0858a Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Wed, 5 Feb 2025 15:42:13 +0000 Subject: [PATCH 1/4] Fix bug where persisting some events fails after unclean shutdown. Introduced in #18107 --- synapse/storage/databases/state/deletion.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/synapse/storage/databases/state/deletion.py b/synapse/storage/databases/state/deletion.py index 4853e5aa2f0..f170143809c 100644 --- a/synapse/storage/databases/state/deletion.py +++ b/synapse/storage/databases/state/deletion.py @@ -95,8 +95,18 @@ def __init__( self.db_pool = database self._instance_name = hs.get_instance_name() - # TODO: Clear from `state_groups_persisting` any holdovers from previous - # running instance. + with db_conn.cursor(txn_name="resolve_sliding_sync") as txn: + self._clear_existing_persising(txn) + + def _clear_existing_persising(self, txn: LoggingTransaction) -> None: + """On startup we clear any entries in `state_groups_persisting` that + much our instance name, in case of a previous unclean shutdown""" + + self.db_pool.simple_delete_txn( + txn, + table="state_groups_persisting", + keyvalues={"instance_name": self._instance_name}, + ) async def check_state_groups_and_bump_deletion( self, state_groups: AbstractSet[int] From 740836eac214b2d4ecf3e6df49f2821ff0bb5d2e Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Wed, 5 Feb 2025 15:45:31 +0000 Subject: [PATCH 2/4] Newsfile --- changelog.d/18137.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/18137.bugfix diff --git a/changelog.d/18137.bugfix b/changelog.d/18137.bugfix new file mode 100644 index 00000000000..d7b9d0426fd --- /dev/null +++ b/changelog.d/18137.bugfix @@ -0,0 +1 @@ +Fix regression where persisting events in some rooms could fail after a previous unclean shutdown. Introduced in v1.124.0rc1. From 2ed9cf48035a89fb910d6d25da2929e7cb424a31 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Wed, 5 Feb 2025 15:55:26 +0000 Subject: [PATCH 3/4] Update synapse/storage/databases/state/deletion.py Co-authored-by: Devon Hudson --- synapse/storage/databases/state/deletion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/synapse/storage/databases/state/deletion.py b/synapse/storage/databases/state/deletion.py index f170143809c..5a84a5e598b 100644 --- a/synapse/storage/databases/state/deletion.py +++ b/synapse/storage/databases/state/deletion.py @@ -100,7 +100,7 @@ def __init__( def _clear_existing_persising(self, txn: LoggingTransaction) -> None: """On startup we clear any entries in `state_groups_persisting` that - much our instance name, in case of a previous unclean shutdown""" + match our instance name, in case of a previous unclean shutdown""" self.db_pool.simple_delete_txn( txn, From dabb6d06dc6d5e706a3dfa8fd2c8fd9ed9100bed Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Wed, 5 Feb 2025 15:55:58 +0000 Subject: [PATCH 4/4] Better naming --- synapse/storage/databases/state/deletion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/synapse/storage/databases/state/deletion.py b/synapse/storage/databases/state/deletion.py index 5a84a5e598b..d0949261f2b 100644 --- a/synapse/storage/databases/state/deletion.py +++ b/synapse/storage/databases/state/deletion.py @@ -95,7 +95,7 @@ def __init__( self.db_pool = database self._instance_name = hs.get_instance_name() - with db_conn.cursor(txn_name="resolve_sliding_sync") as txn: + with db_conn.cursor(txn_name="_clear_existing_persising") as txn: self._clear_existing_persising(txn) def _clear_existing_persising(self, txn: LoggingTransaction) -> None: