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

Commit f30a71a

Browse files
authored
Stop trying to fetch events with event_id=None. (#5753)
`None` is not a valid event id, so queuing up a database fetch for it seems like a silly thing to do. I considered making `get_event` return `None` if `event_id is None`, but then its interaction with `allow_none` seemed uninituitive, and strong typing ftw.
1 parent 418635e commit f30a71a

File tree

4 files changed

+23
-11
lines changed

4 files changed

+23
-11
lines changed

changelog.d/5753.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Stop trying to fetch events with event_id=None.

synapse/handlers/message.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,11 @@ def create_event(
378378
# tolerate them in event_auth.check().
379379
prev_state_ids = yield context.get_prev_state_ids(self.store)
380380
prev_event_id = prev_state_ids.get((EventTypes.Member, event.sender))
381-
prev_event = yield self.store.get_event(prev_event_id, allow_none=True)
381+
prev_event = (
382+
yield self.store.get_event(prev_event_id, allow_none=True)
383+
if prev_event_id
384+
else None
385+
)
382386
if not prev_event or prev_event.membership != Membership.JOIN:
383387
logger.warning(
384388
(
@@ -521,6 +525,8 @@ def deduplicate_state_event(self, event, context):
521525
"""
522526
prev_state_ids = yield context.get_prev_state_ids(self.store)
523527
prev_event_id = prev_state_ids.get((event.type, event.state_key))
528+
if not prev_event_id:
529+
return
524530
prev_event = yield self.store.get_event(prev_event_id, allow_none=True)
525531
if not prev_event:
526532
return

synapse/storage/events_worker.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,11 @@ def get_event(
139139
If there is a mismatch, behave as per allow_none.
140140
141141
Returns:
142-
Deferred : A FrozenEvent.
142+
Deferred[EventBase|None]
143143
"""
144+
if not isinstance(event_id, str):
145+
raise TypeError("Invalid event event_id %r" % (event_id,))
146+
144147
events = yield self.get_events_as_list(
145148
[event_id],
146149
check_redacted=check_redacted,

synapse/storage/stats.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -211,16 +211,18 @@ def _get_next_batch(txn):
211211
avatar_id = current_state_ids.get((EventTypes.RoomAvatar, ""))
212212
canonical_alias_id = current_state_ids.get((EventTypes.CanonicalAlias, ""))
213213

214+
event_ids = [
215+
join_rules_id,
216+
history_visibility_id,
217+
encryption_id,
218+
name_id,
219+
topic_id,
220+
avatar_id,
221+
canonical_alias_id,
222+
]
223+
214224
state_events = yield self.get_events(
215-
[
216-
join_rules_id,
217-
history_visibility_id,
218-
encryption_id,
219-
name_id,
220-
topic_id,
221-
avatar_id,
222-
canonical_alias_id,
223-
]
225+
[ev for ev in event_ids if ev is not None]
224226
)
225227

226228
def _get_or_none(event_id, arg):

0 commit comments

Comments
 (0)