Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 5ce9b79

Browse files
committed
Avoid executing no-op queries.
1 parent 70b503f commit 5ce9b79

File tree

5 files changed

+20
-12
lines changed

5 files changed

+20
-12
lines changed

synapse/storage/database.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,7 +1132,7 @@ def simple_insert_many_txn(
11321132
txn: LoggingTransaction,
11331133
table: str,
11341134
keys: Collection[str],
1135-
values: Iterable[Iterable[Any]],
1135+
values: Collection[Iterable[Any]],
11361136
) -> None:
11371137
"""Executes an INSERT query on the named table.
11381138
@@ -1145,6 +1145,9 @@ def simple_insert_many_txn(
11451145
keys: list of column names
11461146
values: for each row, a list of values in the same order as `keys`
11471147
"""
1148+
# IF there's nothing to insert, don't send the query.
1149+
if not values:
1150+
return
11481151

11491152
if isinstance(txn.database_engine, PostgresEngine):
11501153
# We use `execute_values` as it can be a lot faster than `execute_batch`,
@@ -1470,7 +1473,7 @@ def simple_upsert_many_txn(
14701473
key_names: Collection[str],
14711474
key_values: Collection[Iterable[Any]],
14721475
value_names: Collection[str],
1473-
value_values: Iterable[Iterable[Any]],
1476+
value_values: Collection[Iterable[Any]],
14741477
) -> None:
14751478
"""
14761479
Upsert, many times.
@@ -1483,6 +1486,9 @@ def simple_upsert_many_txn(
14831486
value_values: A list of each row's value column values.
14841487
Ignored if value_names is empty.
14851488
"""
1489+
if not value_values:
1490+
return
1491+
14861492
if table not in self._unsafe_to_upsert_tables:
14871493
return self.simple_upsert_many_txn_native_upsert(
14881494
txn, table, key_names, key_values, value_names, value_values
@@ -2059,6 +2065,8 @@ def simple_update_many_txn(
20592065
raise ValueError(
20602066
f"{len(key_values)} key rows and {len(value_values)} value rows: should be the same number."
20612067
)
2068+
if not value_values:
2069+
return
20622070

20632071
# List of tuples of (value values, then key values)
20642072
# (This matches the order needed for the query)

synapse/storage/databases/main/devices.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ def _mark_as_sent_devices_by_remote_txn(
703703
key_names=("destination", "user_id"),
704704
key_values=[(destination, user_id) for user_id, _ in rows],
705705
value_names=("stream_id",),
706-
value_values=((stream_id,) for _, stream_id in rows),
706+
value_values=[(stream_id,) for _, stream_id in rows],
707707
)
708708

709709
# Delete all sent outbound pokes

synapse/storage/databases/main/events.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,7 +1454,7 @@ def event_dict(event: EventBase) -> JsonDict:
14541454
txn,
14551455
table="event_json",
14561456
keys=("event_id", "room_id", "internal_metadata", "json", "format_version"),
1457-
values=(
1457+
values=[
14581458
(
14591459
event.event_id,
14601460
event.room_id,
@@ -1463,7 +1463,7 @@ def event_dict(event: EventBase) -> JsonDict:
14631463
event.format_version,
14641464
)
14651465
for event, _ in events_and_contexts
1466-
),
1466+
],
14671467
)
14681468

14691469
self.db_pool.simple_insert_many_txn(
@@ -1486,7 +1486,7 @@ def event_dict(event: EventBase) -> JsonDict:
14861486
"state_key",
14871487
"rejection_reason",
14881488
),
1489-
values=(
1489+
values=[
14901490
(
14911491
self._instance_name,
14921492
event.internal_metadata.stream_ordering,
@@ -1505,7 +1505,7 @@ def event_dict(event: EventBase) -> JsonDict:
15051505
context.rejected,
15061506
)
15071507
for event, context in events_and_contexts
1508-
),
1508+
],
15091509
)
15101510

15111511
# If we're persisting an unredacted event we go and ensure
@@ -1528,11 +1528,11 @@ def event_dict(event: EventBase) -> JsonDict:
15281528
txn,
15291529
table="state_events",
15301530
keys=("event_id", "room_id", "type", "state_key"),
1531-
values=(
1531+
values=[
15321532
(event.event_id, event.room_id, event.type, event.state_key)
15331533
for event, _ in events_and_contexts
15341534
if event.is_state()
1535-
),
1535+
],
15361536
)
15371537

15381538
def _store_rejected_events_txn(

synapse/storage/databases/main/room.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2216,7 +2216,7 @@ def _store_partial_state_room_txn(
22162216
txn,
22172217
table="partial_state_rooms_servers",
22182218
keys=("room_id", "server_name"),
2219-
values=((room_id, s) for s in servers),
2219+
values=[(room_id, s) for s in servers],
22202220
)
22212221
self._invalidate_cache_and_stream(txn, self.is_partial_state_room, (room_id,))
22222222
self._invalidate_cache_and_stream(

synapse/storage/databases/main/search.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,15 @@ def store_search_entries_txn(
106106
txn,
107107
table="event_search",
108108
keys=("event_id", "room_id", "key", "value"),
109-
values=(
109+
values=[
110110
(
111111
entry.event_id,
112112
entry.room_id,
113113
entry.key,
114114
_clean_value_for_search(entry.value),
115115
)
116116
for entry in entries
117-
),
117+
],
118118
)
119119

120120
else:

0 commit comments

Comments
 (0)