Properly setup the additional sequences in the portdb script. (#16043)

The un_partial_stated_event_stream_sequence and
application_services_txn_id_seq were never properly configured
in the portdb script, resulting in an error on start-up.
This commit is contained in:
Patrick Cloke 2023-08-01 10:36:33 -04:00 committed by GitHub
parent 5eb3fd785b
commit 90ad836ed8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 3 deletions

1
changelog.d/16043.bugfix Normal file
View File

@ -0,0 +1 @@
Fix a long-standing bug where the `synapse_port_db` failed to configure sequences for application services and partial stated rooms.

View File

@ -761,7 +761,7 @@ class Porter:
# Step 2. Set up sequences # Step 2. Set up sequences
# #
# We do this before porting the tables so that event if we fail half # We do this before porting the tables so that even if we fail half
# way through the postgres DB always have sequences that are greater # way through the postgres DB always have sequences that are greater
# than their respective tables. If we don't then creating the # than their respective tables. If we don't then creating the
# `DataStore` object will fail due to the inconsistency. # `DataStore` object will fail due to the inconsistency.
@ -769,6 +769,10 @@ class Porter:
await self._setup_state_group_id_seq() await self._setup_state_group_id_seq()
await self._setup_user_id_seq() await self._setup_user_id_seq()
await self._setup_events_stream_seqs() await self._setup_events_stream_seqs()
await self._setup_sequence(
"un_partial_stated_event_stream_sequence",
("un_partial_stated_event_stream",),
)
await self._setup_sequence( await self._setup_sequence(
"device_inbox_sequence", ("device_inbox", "device_federation_outbox") "device_inbox_sequence", ("device_inbox", "device_federation_outbox")
) )
@ -779,6 +783,11 @@ class Porter:
await self._setup_sequence("receipts_sequence", ("receipts_linearized",)) await self._setup_sequence("receipts_sequence", ("receipts_linearized",))
await self._setup_sequence("presence_stream_sequence", ("presence_stream",)) await self._setup_sequence("presence_stream_sequence", ("presence_stream",))
await self._setup_auth_chain_sequence() await self._setup_auth_chain_sequence()
await self._setup_sequence(
"application_services_txn_id_seq",
("application_services_txns",),
"txn_id",
)
# Step 3. Get tables. # Step 3. Get tables.
self.progress.set_state("Fetching tables") self.progress.set_state("Fetching tables")
@ -1083,7 +1092,10 @@ class Porter:
) )
async def _setup_sequence( async def _setup_sequence(
self, sequence_name: str, stream_id_tables: Iterable[str] self,
sequence_name: str,
stream_id_tables: Iterable[str],
column_name: str = "stream_id",
) -> None: ) -> None:
"""Set a sequence to the correct value.""" """Set a sequence to the correct value."""
current_stream_ids = [] current_stream_ids = []
@ -1093,7 +1105,7 @@ class Porter:
await self.sqlite_store.db_pool.simple_select_one_onecol( await self.sqlite_store.db_pool.simple_select_one_onecol(
table=stream_id_table, table=stream_id_table,
keyvalues={}, keyvalues={},
retcol="COALESCE(MAX(stream_id), 1)", retcol=f"COALESCE(MAX({column_name}), 1)",
allow_none=True, allow_none=True,
), ),
) )