From 368fb8b43da9a96fa4d4efed426b8f1df61cbf53 Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Thu, 13 Jan 2022 11:07:35 -0500 Subject: [PATCH 1/6] Replace uses of simple_insert_many with simple_insert_many_values. --- synapse/rest/admin/background_updates.py | 46 ++++++++----------- .../storage/databases/main/e2e_room_keys.py | 36 ++++++++++----- .../storage/databases/main/end_to_end_keys.py | 27 +++++++---- .../databases/main/events_bg_updates.py | 21 +++------ tests/rest/admin/test_registration_tokens.py | 17 ++----- tests/storage/test_event_federation.py | 28 ++++++----- 6 files changed, 88 insertions(+), 87 deletions(-) diff --git a/synapse/rest/admin/background_updates.py b/synapse/rest/admin/background_updates.py index 6ec00ce0b9a8..e0058c7133cf 100644 --- a/synapse/rest/admin/background_updates.py +++ b/synapse/rest/admin/background_updates.py @@ -123,41 +123,33 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]: job_name = body["job_name"] if job_name == "populate_stats_process_rooms": - jobs = [ - { - "update_name": "populate_stats_process_rooms", - "progress_json": "{}", - }, - ] + jobs = [("populate_stats_process_rooms", "{}", "")] elif job_name == "regenerate_directory": jobs = [ - { - "update_name": "populate_user_directory_createtables", - "progress_json": "{}", - "depends_on": "", - }, - { - "update_name": "populate_user_directory_process_rooms", - "progress_json": "{}", - "depends_on": "populate_user_directory_createtables", - }, - { - "update_name": "populate_user_directory_process_users", - "progress_json": "{}", - "depends_on": "populate_user_directory_process_rooms", - }, - { - "update_name": "populate_user_directory_cleanup", - "progress_json": "{}", - "depends_on": "populate_user_directory_process_users", - }, + ("populate_user_directory_createtables", "{}", ""), + ( + "populate_user_directory_process_rooms", + "{}", + "populate_user_directory_createtables", + ), + ( + "populate_user_directory_process_users", + "{}", + "populate_user_directory_process_rooms", + ), + ( + "populate_user_directory_cleanup", + "{}", + "populate_user_directory_process_users", + ), ] else: raise SynapseError(HTTPStatus.BAD_REQUEST, "Invalid job_name") try: - await self._store.db_pool.simple_insert_many( + await self._store.db_pool.simple_insert_many_values( table="background_updates", + keys=("update_name", "progress_json", "depends_on"), values=jobs, desc=f"admin_api_run_{job_name}", ) diff --git a/synapse/storage/databases/main/e2e_room_keys.py b/synapse/storage/databases/main/e2e_room_keys.py index 0cb48b9dd750..517fa0d8eba7 100644 --- a/synapse/storage/databases/main/e2e_room_keys.py +++ b/synapse/storage/databases/main/e2e_room_keys.py @@ -110,16 +110,16 @@ async def add_e2e_room_keys( values = [] for (room_id, session_id, room_key) in room_keys: values.append( - { - "user_id": user_id, - "version": version_int, - "room_id": room_id, - "session_id": session_id, - "first_message_index": room_key["first_message_index"], - "forwarded_count": room_key["forwarded_count"], - "is_verified": room_key["is_verified"], - "session_data": json_encoder.encode(room_key["session_data"]), - } + ( + user_id, + version_int, + room_id, + session_id, + room_key["first_message_index"], + room_key["forwarded_count"], + room_key["is_verified"], + json_encoder.encode(room_key["session_data"]), + ) ) log_kv( { @@ -130,8 +130,20 @@ async def add_e2e_room_keys( } ) - await self.db_pool.simple_insert_many( - table="e2e_room_keys", values=values, desc="add_e2e_room_keys" + await self.db_pool.simple_insert_many_values( + table="e2e_room_keys", + keys=( + "user_id", + "version", + "room_id", + "session_id", + "first_message_index", + "forwarded_count", + "is_verified", + "session_data", + ), + values=values, + desc="add_e2e_room_keys", ) @trace diff --git a/synapse/storage/databases/main/end_to_end_keys.py b/synapse/storage/databases/main/end_to_end_keys.py index 86cab975639c..467ec72b13e5 100644 --- a/synapse/storage/databases/main/end_to_end_keys.py +++ b/synapse/storage/databases/main/end_to_end_keys.py @@ -1184,17 +1184,24 @@ async def store_e2e_cross_signing_signatures( user_id: the user who made the signatures signatures: signatures to add """ - await self.db_pool.simple_insert_many( + await self.db_pool.simple_insert_many_values( "e2e_cross_signing_signatures", - [ - { - "user_id": user_id, - "key_id": item.signing_key_id, - "target_user_id": item.target_user_id, - "target_device_id": item.target_device_id, - "signature": item.signature, - } + keys=( + "user_id", + "key_id", + "target_user_id", + "target_device_id", + "signature", + ), + values=[ + ( + user_id, + item.signing_key_id, + item.target_user_id, + item.target_device_id, + item.signature, + ) for item in signatures ], - "add_e2e_signing_key", + desc="add_e2e_signing_key", ) diff --git a/synapse/storage/databases/main/events_bg_updates.py b/synapse/storage/databases/main/events_bg_updates.py index 0a96664caf1b..df0bd8022371 100644 --- a/synapse/storage/databases/main/events_bg_updates.py +++ b/synapse/storage/databases/main/events_bg_updates.py @@ -803,36 +803,27 @@ def get_rejected_events( if not has_state: state_events.append( - { - "event_id": event.event_id, - "room_id": event.room_id, - "type": event.type, - "state_key": event.state_key, - } + (event.event_id, event.room_id, event.type, event.state_key) ) if not has_event_auth: # Old, dodgy, events may have duplicate auth events, which we # need to deduplicate as we have a unique constraint. for auth_id in set(event.auth_event_ids()): - auth_events.append( - { - "room_id": event.room_id, - "event_id": event.event_id, - "auth_id": auth_id, - } - ) + auth_events.append((event.event_id, event.room_id, auth_id)) if state_events: - await self.db_pool.simple_insert_many( + await self.db_pool.simple_insert_many_values( table="state_events", + keys=("event_id", "room_id", "type", "state_key"), values=state_events, desc="_rejected_events_metadata_state_events", ) if auth_events: - await self.db_pool.simple_insert_many( + await self.db_pool.simple_insert_many_values( table="event_auth", + keys=("event_id", "room_id", "auth_id"), values=auth_events, desc="_rejected_events_metadata_event_auth", ) diff --git a/tests/rest/admin/test_registration_tokens.py b/tests/rest/admin/test_registration_tokens.py index 81f3ac7f0448..933e2a61fa6d 100644 --- a/tests/rest/admin/test_registration_tokens.py +++ b/tests/rest/admin/test_registration_tokens.py @@ -223,20 +223,13 @@ def test_create_unable_to_generate_token(self) -> None: # Create all possible single character tokens tokens = [] for c in string.ascii_letters + string.digits + "._~-": - tokens.append( - { - "token": c, - "uses_allowed": None, - "pending": 0, - "completed": 0, - "expiry_time": None, - } - ) + tokens.append((c, None, 0, 0, None)) self.get_success( - self.store.db_pool.simple_insert_many( + self.store.db_pool.simple_insert_many_values( "registration_tokens", - tokens, - "create_all_registration_tokens", + keys=("token", "uses_allowed", "pending", "completed", "expiry_time"), + values=tokens, + desc="create_all_registration_tokens", ) ) diff --git a/tests/storage/test_event_federation.py b/tests/storage/test_event_federation.py index ecfda7677e0a..63732b3a859d 100644 --- a/tests/storage/test_event_federation.py +++ b/tests/storage/test_event_federation.py @@ -513,19 +513,25 @@ def test_prune_inbound_federation_queue(self): # Insert a bunch of events that all reference the previous one. self.get_success( - self.store.db_pool.simple_insert_many( + self.store.db_pool.simple_insert_many_values( table="federation_inbound_events_staging", + keys=( + "origin", + "room_id", + "received_ts", + "event_id", + "event_json", + "internal_metadata", + ), values=[ - { - "origin": "some_origin", - "room_id": room_id, - "received_ts": 0, - "event_id": f"$fake_event_id_{i + 1}", - "event_json": json_encoder.encode( - {"prev_events": [f"$fake_event_id_{i}"]} - ), - "internal_metadata": "{}", - } + ( + "some_origin", + room_id, + 0, + f"$fake_event_id_{i + 1}", + json_encoder.encode({"prev_events": [f"$fake_event_id_{i}"]}), + "{}", + ) for i in range(500) ], desc="test_prune_inbound_federation_queue", From c7fcdaa1220f7043a51346356d69a15bce14c508 Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Thu, 13 Jan 2022 11:08:17 -0500 Subject: [PATCH 2/6] Remove unused simple_insert_many. --- synapse/storage/database.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/synapse/storage/database.py b/synapse/storage/database.py index a27cc3605c73..4dd855f2399b 100644 --- a/synapse/storage/database.py +++ b/synapse/storage/database.py @@ -933,21 +933,6 @@ def simple_insert_txn( txn.execute(sql, vals) - async def simple_insert_many( - self, table: str, values: List[Dict[str, Any]], desc: str - ) -> None: - """Executes an INSERT query on the named table. - - The input is given as a list of dicts, with one dict per row. - Generally simple_insert_many_values should be preferred for new code. - - Args: - table: string giving the table name - values: dict of new column names and values for them - desc: description of the transaction, for logging and metrics - """ - await self.runInteraction(desc, self.simple_insert_many_txn, table, values) - @staticmethod def simple_insert_many_txn( txn: LoggingTransaction, table: str, values: List[Dict[str, Any]] From 0744430044047d21151ab66101b8d7bccdd40c9d Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Thu, 13 Jan 2022 11:47:20 -0500 Subject: [PATCH 3/6] Replace uses of simple_insert_many_txn with simple_insert_many_values_txn. --- .../storage/databases/main/account_data.py | 6 +- synapse/storage/databases/main/deviceinbox.py | 34 ++--- synapse/storage/databases/main/devices.py | 43 +++--- synapse/storage/databases/main/directory.py | 8 +- .../storage/databases/main/end_to_end_keys.py | 19 +-- .../databases/main/event_push_actions.py | 23 +-- synapse/storage/databases/main/events.py | 136 +++++++++--------- .../databases/main/events_bg_updates.py | 15 +- synapse/storage/databases/main/presence.py | 35 +++-- synapse/storage/databases/main/pusher.py | 10 +- .../storage/databases/main/user_directory.py | 12 +- synapse/storage/databases/state/bg_updates.py | 17 +-- synapse/storage/databases/state/store.py | 33 ++--- 13 files changed, 202 insertions(+), 189 deletions(-) diff --git a/synapse/storage/databases/main/account_data.py b/synapse/storage/databases/main/account_data.py index 93db71d1b489..d02e0c4df85a 100644 --- a/synapse/storage/databases/main/account_data.py +++ b/synapse/storage/databases/main/account_data.py @@ -533,12 +533,12 @@ def _add_account_data_for_user( ) # Add entries which are newly ignored. - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="ignored_users", + keys=("ignorer_user_id", "ignored_user_id"), values=[ - {"ignorer_user_id": user_id, "ignored_user_id": u} - for u in currently_ignored_users - previously_ignored_users + (user_id, u) for u in currently_ignored_users - previously_ignored_users ], ) diff --git a/synapse/storage/databases/main/deviceinbox.py b/synapse/storage/databases/main/deviceinbox.py index 3682cb6a8139..a8e7b7cafe38 100644 --- a/synapse/storage/databases/main/deviceinbox.py +++ b/synapse/storage/databases/main/deviceinbox.py @@ -429,17 +429,24 @@ def add_messages_txn(txn, now_ms, stream_id): # Add the remote messages to the federation outbox. # We'll send them to a remote server when we next send a # federation transaction to that destination. - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="device_federation_outbox", + keys=( + "destination", + "stream_id", + "queued_ts", + "messages_json", + "instance_name", + ), values=[ - { - "destination": destination, - "stream_id": stream_id, - "queued_ts": now_ms, - "messages_json": json_encoder.encode(edu), - "instance_name": self._instance_name, - } + ( + destination, + stream_id, + now_ms, + json_encoder.encode(edu), + self._instance_name, + ) for destination, edu in remote_messages_by_destination.items() ], ) @@ -568,17 +575,12 @@ def _add_messages_to_local_device_inbox_txn( if not local_by_user_then_device: return - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="device_inbox", + keys=("user_id", "device_id", "stream_id", "message_json", "instance_name"), values=[ - { - "user_id": user_id, - "device_id": device_id, - "stream_id": stream_id, - "message_json": message_json, - "instance_name": self._instance_name, - } + (user_id, device_id, stream_id, message_json, self._instance_name) for user_id, messages_by_device in local_by_user_then_device.items() for device_id, message_json in messages_by_device.items() ], diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py index 52fbf50db64f..b6da2c1c26b2 100644 --- a/synapse/storage/databases/main/devices.py +++ b/synapse/storage/databases/main/devices.py @@ -1383,15 +1383,12 @@ def _update_remote_device_list_cache_txn( txn, table="device_lists_remote_cache", keyvalues={"user_id": user_id} ) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="device_lists_remote_cache", + keys=("user_id", "device_id", "content"), values=[ - { - "user_id": user_id, - "device_id": content["device_id"], - "content": json_encoder.encode(content), - } + (user_id, content["device_id"], json_encoder.encode(content)) for content in devices ], ) @@ -1476,11 +1473,12 @@ def _add_device_change_to_stream_txn( [(user_id, device_id, min_stream_id) for device_id in device_ids], ) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="device_lists_stream", + keys=("stream_id", "user_id", "device_id"), values=[ - {"stream_id": stream_id, "user_id": user_id, "device_id": device_id} + (stream_id, user_id, device_id) for stream_id, device_id in zip(stream_ids, device_ids) ], ) @@ -1504,21 +1502,30 @@ def _add_device_outbound_poke_to_stream_txn( now = self._clock.time_msec() next_stream_id = iter(stream_ids) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="device_lists_outbound_pokes", + keys=( + "destination", + "stream_id", + "user_id", + "device_id", + "sent", + "ts", + "opentracing_context", + ), values=[ - { - "destination": destination, - "stream_id": next(next_stream_id), - "user_id": user_id, - "device_id": device_id, - "sent": False, - "ts": now, - "opentracing_context": json_encoder.encode(context) + ( + destination, + next(next_stream_id), + user_id, + device_id, + False, + now, + json_encoder.encode(context) if whitelisted_homeserver(destination) else "{}", - } + ) for destination in hosts for device_id in device_ids ], diff --git a/synapse/storage/databases/main/directory.py b/synapse/storage/databases/main/directory.py index f76c6121e8a9..56ac1af90083 100644 --- a/synapse/storage/databases/main/directory.py +++ b/synapse/storage/databases/main/directory.py @@ -109,13 +109,11 @@ def alias_txn(txn: LoggingTransaction) -> None: }, ) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="room_alias_servers", - values=[ - {"room_alias": room_alias.to_string(), "server": server} - for server in servers - ], + keys=("room_alias", "server"), + values=[(room_alias.to_string(), server) for server in servers], ) self._invalidate_cache_and_stream( diff --git a/synapse/storage/databases/main/end_to_end_keys.py b/synapse/storage/databases/main/end_to_end_keys.py index 467ec72b13e5..6d6d34cfd4ff 100644 --- a/synapse/storage/databases/main/end_to_end_keys.py +++ b/synapse/storage/databases/main/end_to_end_keys.py @@ -384,18 +384,19 @@ def _add_e2e_one_time_keys(txn: LoggingTransaction) -> None: # a unique constraint. If there is a race of two calls to # `add_e2e_one_time_keys` then they'll conflict and we will only # insert one set. - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="e2e_one_time_keys_json", + keys=( + "user_id", + "device_id", + "algorithm", + "key_id", + "ts_added_ms", + "key_json", + ), values=[ - { - "user_id": user_id, - "device_id": device_id, - "algorithm": algorithm, - "key_id": key_id, - "ts_added_ms": time_now, - "key_json": json_bytes, - } + (user_id, device_id, algorithm, key_id, time_now, json_bytes) for algorithm, key_id, json_bytes in new_keys ], ) diff --git a/synapse/storage/databases/main/event_push_actions.py b/synapse/storage/databases/main/event_push_actions.py index a98e6b259378..dd32ab7f2c2b 100644 --- a/synapse/storage/databases/main/event_push_actions.py +++ b/synapse/storage/databases/main/event_push_actions.py @@ -872,17 +872,24 @@ def _rotate_notifs_before_txn( # If the `old.user_id` above is NULL then we know there isn't already an # entry in the table, so we simply insert it. Otherwise we update the # existing table. - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="event_push_summary", + keys=( + "user_id", + "room_id", + "notif_count", + "unread_count", + "stream_ordering", + ), values=[ - { - "user_id": user_id, - "room_id": room_id, - "notif_count": summary.notif_count, - "unread_count": summary.unread_count, - "stream_ordering": summary.stream_ordering, - } + ( + user_id, + room_id, + summary.notif_count, + summary.unread_count, + summary.stream_ordering, + ) for ((user_id, room_id), summary) in summaries.items() if summary.old_user_id is None ], diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py index cce230559773..2c8ac1be5868 100644 --- a/synapse/storage/databases/main/events.py +++ b/synapse/storage/databases/main/events.py @@ -439,15 +439,12 @@ def _persist_event_auth_chain_txn( # event's auth chain, but its easier for now just to store them (and # it doesn't take much storage compared to storing the entire event # anyway). - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="event_auth", + keys=("event_id", "room_id", "auth_id"), values=[ - { - "event_id": event.event_id, - "room_id": event.room_id, - "auth_id": auth_id, - } + (event.event_id, event.room_id, auth_id) for event in events for auth_id in event.auth_event_ids() if event.is_state() @@ -672,11 +669,12 @@ def _add_chain_cover_index( ) chain_map.update(new_chain_tuples) - db_pool.simple_insert_many_txn( + db_pool.simple_insert_many_values_txn( txn, table="event_auth_chains", + keys=("event_id", "chain_id", "sequence_number"), values=[ - {"event_id": event_id, "chain_id": c_id, "sequence_number": seq} + (event_id, c_id, seq) for event_id, (c_id, seq) in new_chain_tuples.items() ], ) @@ -779,16 +777,17 @@ def _add_chain_cover_index( (chain_id, sequence_number), (target_id, target_seq) ) - db_pool.simple_insert_many_txn( + db_pool.simple_insert_many_values_txn( txn, table="event_auth_chain_links", + keys=( + "origin_chain_id", + "origin_sequence_number", + "target_chain_id", + "target_sequence_number", + ), values=[ - { - "origin_chain_id": source_id, - "origin_sequence_number": source_seq, - "target_chain_id": target_id, - "target_sequence_number": target_seq, - } + (source_id, source_seq, target_id, target_seq) for ( source_id, source_seq, @@ -943,20 +942,28 @@ def _persist_transaction_ids_txn( txn_id = getattr(event.internal_metadata, "txn_id", None) if token_id and txn_id: to_insert.append( - { - "event_id": event.event_id, - "room_id": event.room_id, - "user_id": event.sender, - "token_id": token_id, - "txn_id": txn_id, - "inserted_ts": self._clock.time_msec(), - } + ( + event.event_id, + event.room_id, + event.sender, + token_id, + txn_id, + self._clock.time_msec(), + ) ) if to_insert: - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="event_txn_id", + keys=( + "event_id", + "room_id", + "user_id", + "token_id", + "txn_id", + "inserted_ts", + ), values=to_insert, ) @@ -1158,11 +1165,12 @@ def _update_forward_extremities_txn( self.store.get_latest_event_ids_in_room.invalidate, (room_id,) ) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="event_forward_extremities", + keys=("event_id", "room_id"), values=[ - {"event_id": ev_id, "room_id": room_id} + (ev_id, room_id) for room_id, new_extrem in new_forward_extremities.items() for ev_id in new_extrem ], @@ -1171,15 +1179,12 @@ def _update_forward_extremities_txn( # new stream_ordering to new forward extremeties in the room. # This allows us to later efficiently look up the forward extremeties # for a room before a given stream_ordering - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="stream_ordering_to_exterm", + keys=("room_id", "event_id", "stream_ordering"), values=[ - { - "room_id": room_id, - "event_id": event_id, - "stream_ordering": max_stream_order, - } + (room_id, event_id, max_stream_order) for room_id, new_extrem in new_forward_extremities.items() for event_id in new_extrem ], @@ -1619,17 +1624,12 @@ def insert_labels_for_event_txn( room_id (str): The ID of the room the event was sent to. topological_ordering (int): The position of the event in the room's topology. """ - return self.db_pool.simple_insert_many_txn( + return self.db_pool.simple_insert_many_values_txn( txn=txn, table="event_labels", + keys=("event_id", "label", "room_id", "topological_ordering"), values=[ - { - "event_id": event_id, - "label": label, - "room_id": room_id, - "topological_ordering": topological_ordering, - } - for label in labels + (event_id, label, room_id, topological_ordering) for label in labels ], ) @@ -1657,16 +1657,13 @@ def _store_event_reference_hashes_txn(self, txn, events): vals = [] for event in events: ref_alg, ref_hash_bytes = compute_event_reference_hash(event) - vals.append( - { - "event_id": event.event_id, - "algorithm": ref_alg, - "hash": memoryview(ref_hash_bytes), - } - ) + vals.append((event.event_id, ref_alg, memoryview(ref_hash_bytes))) - self.db_pool.simple_insert_many_txn( - txn, table="event_reference_hashes", values=vals + self.db_pool.simple_insert_many_values_txn( + txn, + table="event_reference_hashes", + keys=("event_id", "algorithm", "hash"), + values=vals, ) def _store_room_members_txn( @@ -1686,21 +1683,28 @@ def _store_room_members_txn( def non_null_str_or_none(val: Any) -> Optional[str]: return val if isinstance(val, str) and "\u0000" not in val else None - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="room_memberships", + keys=( + "event_id", + "user_id", + "sender", + "room_id", + "membership", + "display_name", + "avatar_url", + ), values=[ - { - "event_id": event.event_id, - "user_id": event.state_key, - "sender": event.user_id, - "room_id": event.room_id, - "membership": event.membership, - "display_name": non_null_str_or_none( - event.content.get("displayname") - ), - "avatar_url": non_null_str_or_none(event.content.get("avatar_url")), - } + ( + event.event_id, + event.state_key, + event.user_id, + event.room_id, + event.membership, + non_null_str_or_none(event.content.get("displayname")), + non_null_str_or_none(event.content.get("avatar_url")), + ) for event in events ], ) @@ -2160,16 +2164,12 @@ def _handle_mult_prev_events(self, txn, events): For the given event, update the event edges table and forward and backward extremities tables. """ - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="event_edges", + keys=("event_id", "prev_event_id", "room_id", "is_state"), values=[ - { - "event_id": ev.event_id, - "prev_event_id": e_id, - "room_id": ev.room_id, - "is_state": False, - } + (ev.event_id, e_id, ev.room_id, False) for ev in events for e_id in ev.prev_event_ids() ], diff --git a/synapse/storage/databases/main/events_bg_updates.py b/synapse/storage/databases/main/events_bg_updates.py index df0bd8022371..de24485ae727 100644 --- a/synapse/storage/databases/main/events_bg_updates.py +++ b/synapse/storage/databases/main/events_bg_updates.py @@ -681,16 +681,17 @@ def _event_store_labels_txn(txn: LoggingTransaction) -> int: try: event_json = db_to_json(event_json_raw) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn=txn, table="event_labels", + keys=("event_id", "label", "room_id", "topological_ordering"), values=[ - { - "event_id": event_id, - "label": label, - "room_id": event_json["room_id"], - "topological_ordering": event_json["depth"], - } + ( + event_id, + label, + event_json["room_id"], + event_json["depth"], + ) for label in event_json["content"].get( EventContentFields.LABELS, [] ) diff --git a/synapse/storage/databases/main/presence.py b/synapse/storage/databases/main/presence.py index cbf9ec38f75d..b9719995151f 100644 --- a/synapse/storage/databases/main/presence.py +++ b/synapse/storage/databases/main/presence.py @@ -126,21 +126,32 @@ def _update_presence_txn(self, txn, stream_orderings, presence_states): txn.execute(sql + clause, [stream_id] + list(args)) # Actually insert new rows - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="presence_stream", + keys=( + "stream_id", + "user_id", + "state", + "last_active_ts", + "last_federation_update_ts", + "last_user_sync_ts", + "status_msg", + "currently_active", + "instance_name", + ), values=[ - { - "stream_id": stream_id, - "user_id": state.user_id, - "state": state.state, - "last_active_ts": state.last_active_ts, - "last_federation_update_ts": state.last_federation_update_ts, - "last_user_sync_ts": state.last_user_sync_ts, - "status_msg": state.status_msg, - "currently_active": state.currently_active, - "instance_name": self._instance_name, - } + ( + stream_id, + state.user_id, + state.state, + state.last_active_ts, + state.last_federation_update_ts, + state.last_user_sync_ts, + state.status_msg, + state.currently_active, + self._instance_name, + ) for stream_id, state in zip(stream_orderings, presence_states) ], ) diff --git a/synapse/storage/databases/main/pusher.py b/synapse/storage/databases/main/pusher.py index 747b4f31df67..9a2ca7ca9993 100644 --- a/synapse/storage/databases/main/pusher.py +++ b/synapse/storage/databases/main/pusher.py @@ -558,16 +558,12 @@ def delete_pushers_txn(txn, stream_ids): keyvalues={"user_name": user_id}, ) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="deleted_pushers", + keys=("stream_id", "app_id", "pushkey", "user_id"), values=[ - { - "stream_id": stream_id, - "app_id": pusher.app_id, - "pushkey": pusher.pushkey, - "user_id": user_id, - } + (stream_id, pusher.app_id, pusher.pushkey, user_id) for stream_id, pusher in zip(stream_ids, pushers) ], ) diff --git a/synapse/storage/databases/main/user_directory.py b/synapse/storage/databases/main/user_directory.py index 0f9b8575d3a5..51ac6ee83ec1 100644 --- a/synapse/storage/databases/main/user_directory.py +++ b/synapse/storage/databases/main/user_directory.py @@ -105,8 +105,10 @@ def _make_staging_area(txn: LoggingTransaction) -> None: GROUP BY room_id """ txn.execute(sql) - rooms = [{"room_id": x[0], "events": x[1]} for x in txn.fetchall()] - self.db_pool.simple_insert_many_txn(txn, TEMP_TABLE + "_rooms", rooms) + rooms = list(txn.fetchall()) + self.db_pool.simple_insert_many_values_txn( + txn, TEMP_TABLE + "_rooms", keys=("room_id", "events"), values=rooms + ) del rooms sql = ( @@ -117,9 +119,11 @@ def _make_staging_area(txn: LoggingTransaction) -> None: txn.execute(sql) txn.execute("SELECT name FROM users") - users = [{"user_id": x[0]} for x in txn.fetchall()] + users = list(txn.fetchall()) - self.db_pool.simple_insert_many_txn(txn, TEMP_TABLE + "_users", users) + self.db_pool.simple_insert_many_values_txn( + txn, TEMP_TABLE + "_users", keys=("user_id",), values=users + ) new_pos = await self.get_max_stream_id_in_current_state_deltas() await self.db_pool.runInteraction( diff --git a/synapse/storage/databases/state/bg_updates.py b/synapse/storage/databases/state/bg_updates.py index eb1118d2cb20..967c30763bc9 100644 --- a/synapse/storage/databases/state/bg_updates.py +++ b/synapse/storage/databases/state/bg_updates.py @@ -324,17 +324,18 @@ def reindex_txn(txn: LoggingTransaction) -> Tuple[bool, int]: keyvalues={"state_group": state_group}, ) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="state_groups_state", + keys=( + "state_group", + "room_id", + "type", + "state_key", + "event_id", + ), values=[ - { - "state_group": state_group, - "room_id": room_id, - "type": key[0], - "state_key": key[1], - "event_id": state_id, - } + (state_group, room_id, key[0], key[1], state_id) for key, state_id in delta_state.items() ], ) diff --git a/synapse/storage/databases/state/store.py b/synapse/storage/databases/state/store.py index c4c8c0021bca..95592b8b2e05 100644 --- a/synapse/storage/databases/state/store.py +++ b/synapse/storage/databases/state/store.py @@ -457,32 +457,22 @@ def _store_state_group_txn(txn: LoggingTransaction) -> int: values={"state_group": state_group, "prev_state_group": prev_group}, ) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="state_groups_state", + keys=("state_group", "room_id", "type", "state_key", "event_id"), values=[ - { - "state_group": state_group, - "room_id": room_id, - "type": key[0], - "state_key": key[1], - "event_id": state_id, - } + (state_group, room_id, key[0], key[1], state_id) for key, state_id in delta_ids.items() ], ) else: - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="state_groups_state", + keys=("state_group", "room_id", "type", "state_key", "event_id"), values=[ - { - "state_group": state_group, - "room_id": room_id, - "type": key[0], - "state_key": key[1], - "event_id": state_id, - } + (state_group, room_id, key[0], key[1], state_id) for key, state_id in current_state_ids.items() ], ) @@ -586,17 +576,12 @@ def _purge_unreferenced_state_groups( txn, table="state_group_edges", keyvalues={"state_group": sg} ) - self.db_pool.simple_insert_many_txn( + self.db_pool.simple_insert_many_values_txn( txn, table="state_groups_state", + keys=("state_group", "room_id", "type", "state_key", "event_id"), values=[ - { - "state_group": sg, - "room_id": room_id, - "type": key[0], - "state_key": key[1], - "event_id": state_id, - } + (sg, room_id, key[0], key[1], state_id) for key, state_id in curr_state.items() ], ) From 36919b1f415cdc895548c253d4583fe8380201ca Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Thu, 13 Jan 2022 11:47:41 -0500 Subject: [PATCH 4/6] Remove unused simple_insert_many_txn. --- synapse/storage/database.py | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/synapse/storage/database.py b/synapse/storage/database.py index 4dd855f2399b..b3b7d61f2ada 100644 --- a/synapse/storage/database.py +++ b/synapse/storage/database.py @@ -933,41 +933,6 @@ def simple_insert_txn( txn.execute(sql, vals) - @staticmethod - def simple_insert_many_txn( - txn: LoggingTransaction, table: str, values: List[Dict[str, Any]] - ) -> None: - """Executes an INSERT query on the named table. - - The input is given as a list of dicts, with one dict per row. - Generally simple_insert_many_values_txn should be preferred for new code. - - Args: - txn: The transaction to use. - table: string giving the table name - values: dict of new column names and values for them - """ - if not values: - return - - # This is a *slight* abomination to get a list of tuples of key names - # and a list of tuples of value names. - # - # i.e. [{"a": 1, "b": 2}, {"c": 3, "d": 4}] - # => [("a", "b",), ("c", "d",)] and [(1, 2,), (3, 4,)] - # - # The sort is to ensure that we don't rely on dictionary iteration - # order. - keys, vals = zip( - *(zip(*(sorted(i.items(), key=lambda kv: kv[0]))) for i in values if i) - ) - - for k in keys: - if k != keys[0]: - raise RuntimeError("All items must have the same keys") - - return DatabasePool.simple_insert_many_values_txn(txn, table, keys[0], vals) - async def simple_insert_many_values( self, table: str, From eee10577166a04744a062e7636a06ad1bc15fefc Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Thu, 13 Jan 2022 11:49:49 -0500 Subject: [PATCH 5/6] Rename simple_insert_many_values{_txn} to simple_insert_many{_txn}. --- synapse/rest/admin/background_updates.py | 2 +- synapse/storage/database.py | 6 ++--- .../storage/databases/main/account_data.py | 2 +- synapse/storage/databases/main/deviceinbox.py | 4 +-- synapse/storage/databases/main/devices.py | 6 ++--- synapse/storage/databases/main/directory.py | 2 +- .../storage/databases/main/e2e_room_keys.py | 2 +- .../storage/databases/main/end_to_end_keys.py | 4 +-- .../databases/main/event_push_actions.py | 2 +- synapse/storage/databases/main/events.py | 26 +++++++++---------- .../databases/main/events_bg_updates.py | 6 ++--- synapse/storage/databases/main/presence.py | 2 +- synapse/storage/databases/main/pusher.py | 2 +- .../storage/databases/main/user_directory.py | 4 +-- synapse/storage/databases/state/bg_updates.py | 2 +- synapse/storage/databases/state/store.py | 6 ++--- tests/rest/admin/test_registration_tokens.py | 2 +- tests/storage/test_event_federation.py | 2 +- 18 files changed, 41 insertions(+), 41 deletions(-) diff --git a/synapse/rest/admin/background_updates.py b/synapse/rest/admin/background_updates.py index e0058c7133cf..e9bce22a347b 100644 --- a/synapse/rest/admin/background_updates.py +++ b/synapse/rest/admin/background_updates.py @@ -147,7 +147,7 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]: raise SynapseError(HTTPStatus.BAD_REQUEST, "Invalid job_name") try: - await self._store.db_pool.simple_insert_many_values( + await self._store.db_pool.simple_insert_many( table="background_updates", keys=("update_name", "progress_json", "depends_on"), values=jobs, diff --git a/synapse/storage/database.py b/synapse/storage/database.py index b3b7d61f2ada..57cc1d76e02f 100644 --- a/synapse/storage/database.py +++ b/synapse/storage/database.py @@ -933,7 +933,7 @@ def simple_insert_txn( txn.execute(sql, vals) - async def simple_insert_many_values( + async def simple_insert_many( self, table: str, keys: Collection[str], @@ -952,11 +952,11 @@ async def simple_insert_many_values( desc: description of the transaction, for logging and metrics """ await self.runInteraction( - desc, self.simple_insert_many_values_txn, table, keys, values + desc, self.simple_insert_many_txn, table, keys, values ) @staticmethod - def simple_insert_many_values_txn( + def simple_insert_many_txn( txn: LoggingTransaction, table: str, keys: Collection[str], diff --git a/synapse/storage/databases/main/account_data.py b/synapse/storage/databases/main/account_data.py index d02e0c4df85a..ef475e18c788 100644 --- a/synapse/storage/databases/main/account_data.py +++ b/synapse/storage/databases/main/account_data.py @@ -533,7 +533,7 @@ def _add_account_data_for_user( ) # Add entries which are newly ignored. - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="ignored_users", keys=("ignorer_user_id", "ignored_user_id"), diff --git a/synapse/storage/databases/main/deviceinbox.py b/synapse/storage/databases/main/deviceinbox.py index a8e7b7cafe38..4eca97189bef 100644 --- a/synapse/storage/databases/main/deviceinbox.py +++ b/synapse/storage/databases/main/deviceinbox.py @@ -429,7 +429,7 @@ def add_messages_txn(txn, now_ms, stream_id): # Add the remote messages to the federation outbox. # We'll send them to a remote server when we next send a # federation transaction to that destination. - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="device_federation_outbox", keys=( @@ -575,7 +575,7 @@ def _add_messages_to_local_device_inbox_txn( if not local_by_user_then_device: return - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="device_inbox", keys=("user_id", "device_id", "stream_id", "message_json", "instance_name"), diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py index b6da2c1c26b2..8748654b5598 100644 --- a/synapse/storage/databases/main/devices.py +++ b/synapse/storage/databases/main/devices.py @@ -1383,7 +1383,7 @@ def _update_remote_device_list_cache_txn( txn, table="device_lists_remote_cache", keyvalues={"user_id": user_id} ) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="device_lists_remote_cache", keys=("user_id", "device_id", "content"), @@ -1473,7 +1473,7 @@ def _add_device_change_to_stream_txn( [(user_id, device_id, min_stream_id) for device_id in device_ids], ) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="device_lists_stream", keys=("stream_id", "user_id", "device_id"), @@ -1502,7 +1502,7 @@ def _add_device_outbound_poke_to_stream_txn( now = self._clock.time_msec() next_stream_id = iter(stream_ids) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="device_lists_outbound_pokes", keys=( diff --git a/synapse/storage/databases/main/directory.py b/synapse/storage/databases/main/directory.py index 56ac1af90083..5903fdaf007a 100644 --- a/synapse/storage/databases/main/directory.py +++ b/synapse/storage/databases/main/directory.py @@ -109,7 +109,7 @@ def alias_txn(txn: LoggingTransaction) -> None: }, ) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="room_alias_servers", keys=("room_alias", "server"), diff --git a/synapse/storage/databases/main/e2e_room_keys.py b/synapse/storage/databases/main/e2e_room_keys.py index 517fa0d8eba7..b789a588a54b 100644 --- a/synapse/storage/databases/main/e2e_room_keys.py +++ b/synapse/storage/databases/main/e2e_room_keys.py @@ -130,7 +130,7 @@ async def add_e2e_room_keys( } ) - await self.db_pool.simple_insert_many_values( + await self.db_pool.simple_insert_many( table="e2e_room_keys", keys=( "user_id", diff --git a/synapse/storage/databases/main/end_to_end_keys.py b/synapse/storage/databases/main/end_to_end_keys.py index 6d6d34cfd4ff..1f8447b5076f 100644 --- a/synapse/storage/databases/main/end_to_end_keys.py +++ b/synapse/storage/databases/main/end_to_end_keys.py @@ -384,7 +384,7 @@ def _add_e2e_one_time_keys(txn: LoggingTransaction) -> None: # a unique constraint. If there is a race of two calls to # `add_e2e_one_time_keys` then they'll conflict and we will only # insert one set. - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="e2e_one_time_keys_json", keys=( @@ -1185,7 +1185,7 @@ async def store_e2e_cross_signing_signatures( user_id: the user who made the signatures signatures: signatures to add """ - await self.db_pool.simple_insert_many_values( + await self.db_pool.simple_insert_many( "e2e_cross_signing_signatures", keys=( "user_id", diff --git a/synapse/storage/databases/main/event_push_actions.py b/synapse/storage/databases/main/event_push_actions.py index dd32ab7f2c2b..b7c4c62222bd 100644 --- a/synapse/storage/databases/main/event_push_actions.py +++ b/synapse/storage/databases/main/event_push_actions.py @@ -872,7 +872,7 @@ def _rotate_notifs_before_txn( # If the `old.user_id` above is NULL then we know there isn't already an # entry in the table, so we simply insert it. Otherwise we update the # existing table. - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="event_push_summary", keys=( diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py index 2c8ac1be5868..de3b48524b13 100644 --- a/synapse/storage/databases/main/events.py +++ b/synapse/storage/databases/main/events.py @@ -439,7 +439,7 @@ def _persist_event_auth_chain_txn( # event's auth chain, but its easier for now just to store them (and # it doesn't take much storage compared to storing the entire event # anyway). - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="event_auth", keys=("event_id", "room_id", "auth_id"), @@ -669,7 +669,7 @@ def _add_chain_cover_index( ) chain_map.update(new_chain_tuples) - db_pool.simple_insert_many_values_txn( + db_pool.simple_insert_many_txn( txn, table="event_auth_chains", keys=("event_id", "chain_id", "sequence_number"), @@ -777,7 +777,7 @@ def _add_chain_cover_index( (chain_id, sequence_number), (target_id, target_seq) ) - db_pool.simple_insert_many_values_txn( + db_pool.simple_insert_many_txn( txn, table="event_auth_chain_links", keys=( @@ -953,7 +953,7 @@ def _persist_transaction_ids_txn( ) if to_insert: - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="event_txn_id", keys=( @@ -1165,7 +1165,7 @@ def _update_forward_extremities_txn( self.store.get_latest_event_ids_in_room.invalidate, (room_id,) ) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="event_forward_extremities", keys=("event_id", "room_id"), @@ -1179,7 +1179,7 @@ def _update_forward_extremities_txn( # new stream_ordering to new forward extremeties in the room. # This allows us to later efficiently look up the forward extremeties # for a room before a given stream_ordering - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="stream_ordering_to_exterm", keys=("room_id", "event_id", "stream_ordering"), @@ -1347,7 +1347,7 @@ def event_dict(event): d.pop("redacted_because", None) return d - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="event_json", keys=("event_id", "room_id", "internal_metadata", "json", "format_version"), @@ -1363,7 +1363,7 @@ def event_dict(event): ), ) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="events", keys=( @@ -1417,7 +1417,7 @@ def event_dict(event): ) txn.execute(sql + clause, [False] + args) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="state_events", keys=("event_id", "room_id", "type", "state_key"), @@ -1624,7 +1624,7 @@ def insert_labels_for_event_txn( room_id (str): The ID of the room the event was sent to. topological_ordering (int): The position of the event in the room's topology. """ - return self.db_pool.simple_insert_many_values_txn( + return self.db_pool.simple_insert_many_txn( txn=txn, table="event_labels", keys=("event_id", "label", "room_id", "topological_ordering"), @@ -1659,7 +1659,7 @@ def _store_event_reference_hashes_txn(self, txn, events): ref_alg, ref_hash_bytes = compute_event_reference_hash(event) vals.append((event.event_id, ref_alg, memoryview(ref_hash_bytes))) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="event_reference_hashes", keys=("event_id", "algorithm", "hash"), @@ -1683,7 +1683,7 @@ def _store_room_members_txn( def non_null_str_or_none(val: Any) -> Optional[str]: return val if isinstance(val, str) and "\u0000" not in val else None - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="room_memberships", keys=( @@ -2164,7 +2164,7 @@ def _handle_mult_prev_events(self, txn, events): For the given event, update the event edges table and forward and backward extremities tables. """ - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="event_edges", keys=("event_id", "prev_event_id", "room_id", "is_state"), diff --git a/synapse/storage/databases/main/events_bg_updates.py b/synapse/storage/databases/main/events_bg_updates.py index de24485ae727..d5f005966597 100644 --- a/synapse/storage/databases/main/events_bg_updates.py +++ b/synapse/storage/databases/main/events_bg_updates.py @@ -681,7 +681,7 @@ def _event_store_labels_txn(txn: LoggingTransaction) -> int: try: event_json = db_to_json(event_json_raw) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn=txn, table="event_labels", keys=("event_id", "label", "room_id", "topological_ordering"), @@ -814,7 +814,7 @@ def get_rejected_events( auth_events.append((event.event_id, event.room_id, auth_id)) if state_events: - await self.db_pool.simple_insert_many_values( + await self.db_pool.simple_insert_many( table="state_events", keys=("event_id", "room_id", "type", "state_key"), values=state_events, @@ -822,7 +822,7 @@ def get_rejected_events( ) if auth_events: - await self.db_pool.simple_insert_many_values( + await self.db_pool.simple_insert_many( table="event_auth", keys=("event_id", "room_id", "auth_id"), values=auth_events, diff --git a/synapse/storage/databases/main/presence.py b/synapse/storage/databases/main/presence.py index b9719995151f..4f05811a77eb 100644 --- a/synapse/storage/databases/main/presence.py +++ b/synapse/storage/databases/main/presence.py @@ -126,7 +126,7 @@ def _update_presence_txn(self, txn, stream_orderings, presence_states): txn.execute(sql + clause, [stream_id] + list(args)) # Actually insert new rows - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="presence_stream", keys=( diff --git a/synapse/storage/databases/main/pusher.py b/synapse/storage/databases/main/pusher.py index 9a2ca7ca9993..cf64cd63a46f 100644 --- a/synapse/storage/databases/main/pusher.py +++ b/synapse/storage/databases/main/pusher.py @@ -558,7 +558,7 @@ def delete_pushers_txn(txn, stream_ids): keyvalues={"user_name": user_id}, ) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="deleted_pushers", keys=("stream_id", "app_id", "pushkey", "user_id"), diff --git a/synapse/storage/databases/main/user_directory.py b/synapse/storage/databases/main/user_directory.py index 51ac6ee83ec1..f7c778bdf22b 100644 --- a/synapse/storage/databases/main/user_directory.py +++ b/synapse/storage/databases/main/user_directory.py @@ -106,7 +106,7 @@ def _make_staging_area(txn: LoggingTransaction) -> None: """ txn.execute(sql) rooms = list(txn.fetchall()) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, TEMP_TABLE + "_rooms", keys=("room_id", "events"), values=rooms ) del rooms @@ -121,7 +121,7 @@ def _make_staging_area(txn: LoggingTransaction) -> None: txn.execute("SELECT name FROM users") users = list(txn.fetchall()) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, TEMP_TABLE + "_users", keys=("user_id",), values=users ) diff --git a/synapse/storage/databases/state/bg_updates.py b/synapse/storage/databases/state/bg_updates.py index 967c30763bc9..5de70f31d294 100644 --- a/synapse/storage/databases/state/bg_updates.py +++ b/synapse/storage/databases/state/bg_updates.py @@ -324,7 +324,7 @@ def reindex_txn(txn: LoggingTransaction) -> Tuple[bool, int]: keyvalues={"state_group": state_group}, ) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="state_groups_state", keys=( diff --git a/synapse/storage/databases/state/store.py b/synapse/storage/databases/state/store.py index 95592b8b2e05..7614d76ac646 100644 --- a/synapse/storage/databases/state/store.py +++ b/synapse/storage/databases/state/store.py @@ -457,7 +457,7 @@ def _store_state_group_txn(txn: LoggingTransaction) -> int: values={"state_group": state_group, "prev_state_group": prev_group}, ) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="state_groups_state", keys=("state_group", "room_id", "type", "state_key", "event_id"), @@ -467,7 +467,7 @@ def _store_state_group_txn(txn: LoggingTransaction) -> int: ], ) else: - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="state_groups_state", keys=("state_group", "room_id", "type", "state_key", "event_id"), @@ -576,7 +576,7 @@ def _purge_unreferenced_state_groups( txn, table="state_group_edges", keyvalues={"state_group": sg} ) - self.db_pool.simple_insert_many_values_txn( + self.db_pool.simple_insert_many_txn( txn, table="state_groups_state", keys=("state_group", "room_id", "type", "state_key", "event_id"), diff --git a/tests/rest/admin/test_registration_tokens.py b/tests/rest/admin/test_registration_tokens.py index 933e2a61fa6d..8513b1d2df53 100644 --- a/tests/rest/admin/test_registration_tokens.py +++ b/tests/rest/admin/test_registration_tokens.py @@ -225,7 +225,7 @@ def test_create_unable_to_generate_token(self) -> None: for c in string.ascii_letters + string.digits + "._~-": tokens.append((c, None, 0, 0, None)) self.get_success( - self.store.db_pool.simple_insert_many_values( + self.store.db_pool.simple_insert_many( "registration_tokens", keys=("token", "uses_allowed", "pending", "completed", "expiry_time"), values=tokens, diff --git a/tests/storage/test_event_federation.py b/tests/storage/test_event_federation.py index 63732b3a859d..632bbc9de73e 100644 --- a/tests/storage/test_event_federation.py +++ b/tests/storage/test_event_federation.py @@ -513,7 +513,7 @@ def test_prune_inbound_federation_queue(self): # Insert a bunch of events that all reference the previous one. self.get_success( - self.store.db_pool.simple_insert_many_values( + self.store.db_pool.simple_insert_many( table="federation_inbound_events_staging", keys=( "origin", From e03a6a404ea2a1847139336c5169cfc3033a8a1b Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Thu, 13 Jan 2022 11:55:10 -0500 Subject: [PATCH 6/6] Newsfragment --- changelog.d/11742.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/11742.misc diff --git a/changelog.d/11742.misc b/changelog.d/11742.misc new file mode 100644 index 000000000000..f65ccdf30a5f --- /dev/null +++ b/changelog.d/11742.misc @@ -0,0 +1 @@ +Minor efficiency improvements when inserting many values into the database.