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

Commit aafa069

Browse files
committed
Remove and switch away from get_create_event_for_room_txn
1 parent fffce99 commit aafa069

File tree

3 files changed

+27
-118
lines changed

3 files changed

+27
-118
lines changed

synapse/storage/databases/main/events.py

+14-4
Original file line numberDiff line numberDiff line change
@@ -1773,8 +1773,13 @@ def _handle_insertion_event(self, txn: LoggingTransaction, event: EventBase):
17731773
# Skip processing an insertion event if the room version doesn't
17741774
# support it or the event is not from the room creator.
17751775
room_version = self.store.get_room_version_txn(txn, event.room_id)
1776-
create_event = self.store.get_create_event_for_room_txn(txn, event.room_id)
1777-
room_creator = create_event.content.get("creator", None)
1776+
room_creator = self.db_pool.simple_select_one_onecol_txn(
1777+
txn,
1778+
table="rooms",
1779+
keyvalues={"room_id": event.room_id},
1780+
retcol="creator",
1781+
allow_none=True,
1782+
)
17781783
if not room_version.msc2716_historical or event.sender != room_creator:
17791784
return
17801785

@@ -1826,8 +1831,13 @@ def _handle_chunk_event(self, txn: LoggingTransaction, event: EventBase):
18261831
# Skip processing a chunk event if the room version doesn't
18271832
# support it or the event is not from the room creator.
18281833
room_version = self.store.get_room_version_txn(txn, event.room_id)
1829-
create_event = self.store.get_create_event_for_room_txn(txn, event.room_id)
1830-
room_creator = create_event.content.get("creator", None)
1834+
room_creator = self.db_pool.simple_select_one_onecol_txn(
1835+
txn,
1836+
table="rooms",
1837+
keyvalues={"room_id": event.room_id},
1838+
retcol="creator",
1839+
allow_none=True,
1840+
)
18311841
if not room_version.msc2716_historical or event.sender != room_creator:
18321842
return
18331843

synapse/storage/databases/main/events_worker.py

+1-69
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
from synapse.replication.tcp.streams import BackfillStream
5656
from synapse.replication.tcp.streams.events import EventsStream
5757
from synapse.storage._base import SQLBaseStore, db_to_json, make_in_list_sql_clause
58-
from synapse.storage.database import DatabasePool, LoggingTransaction
58+
from synapse.storage.database import DatabasePool
5959
from synapse.storage.engines import PostgresEngine
6060
from synapse.storage.util.id_generators import MultiWriterIdGenerator, StreamIdGenerator
6161
from synapse.storage.util.sequence import build_sequence_generator
@@ -223,74 +223,6 @@ async def get_received_ts(self, event_id: str) -> Optional[int]:
223223
desc="get_received_ts",
224224
)
225225

226-
# Inform mypy that if allow_none is False (the default) then get_event
227-
228-
# always returns an EventBase.
229-
@overload
230-
def get_event_txn(
231-
self,
232-
event_id: str,
233-
allow_rejected: bool = False,
234-
allow_none: Literal[False] = False,
235-
) -> EventBase:
236-
...
237-
238-
@overload
239-
def get_event_txn(
240-
self,
241-
event_id: str,
242-
allow_rejected: bool = False,
243-
allow_none: Literal[True] = False,
244-
) -> Optional[EventBase]:
245-
...
246-
247-
def get_event_txn(
248-
self,
249-
txn: LoggingTransaction,
250-
event_id: str,
251-
allow_rejected: bool = False,
252-
allow_none: bool = False,
253-
) -> Optional[EventBase]:
254-
"""Get an event from the database by event_id.
255-
Args:
256-
txn: Transaction object
257-
event_id: The event_id of the event to fetch
258-
get_prev_content: If True and event is a state event,
259-
include the previous states content in the unsigned field.
260-
allow_rejected: If True, return rejected events. Otherwise,
261-
behave as per allow_none.
262-
allow_none: If True, return None if no event found, if
263-
False throw a NotFoundError
264-
check_room_id: if not None, check the room of the found event.
265-
If there is a mismatch, behave as per allow_none.
266-
Returns:
267-
The event, or None if the event was not found and allow_none=True
268-
Raises:
269-
NotFoundError: if the event_id was not found and allow_none=False
270-
"""
271-
event_map = self._fetch_event_rows(txn, [event_id])
272-
event_info = event_map[event_id]
273-
if event_info is None and not allow_none:
274-
raise NotFoundError("Could not find event %s" % (event_id,))
275-
276-
rejected_reason = event_info["rejected_reason"]
277-
if not allow_rejected and rejected_reason:
278-
return
279-
280-
d = db_to_json(event_info["json"])
281-
internal_metadata = db_to_json(event_info["internal_metadata"])
282-
room_version_id = event_info["room_version_id"]
283-
room_version = KNOWN_ROOM_VERSIONS.get(room_version_id)
284-
285-
event = make_event_from_dict(
286-
event_dict=d,
287-
room_version=room_version,
288-
internal_metadata_dict=internal_metadata,
289-
rejected_reason=rejected_reason,
290-
)
291-
292-
return event
293-
294226
# Inform mypy that if allow_none is False (the default) then get_event
295227
# always returns an EventBase.
296228
@overload

synapse/storage/databases/main/state.py

+12-45
Original file line numberDiff line numberDiff line change
@@ -178,34 +178,15 @@ async def get_create_event_for_room(self, room_id: str) -> EventBase:
178178
Raises:
179179
NotFoundError if the room is unknown
180180
"""
181-
return await self.db_pool.runInteraction(
182-
"get_create_event_for_room_txn",
183-
self.get_create_event_for_room_txn,
184-
room_id,
185-
)
186-
187-
def get_create_event_for_room_txn(
188-
self, txn: LoggingTransaction, room_id: str
189-
) -> EventBase:
190-
"""Get the create state event for a room.
191-
Args:
192-
txn: Transaction object
193-
room_id: The room ID.
194-
Returns:
195-
The room creation event.
196-
Raises:
197-
NotFoundError if the room is unknown
198-
"""
199-
200-
state_ids = self.get_current_state_ids_txn(txn, room_id)
181+
state_ids = await self.get_current_state_ids(room_id)
201182
create_id = state_ids.get((EventTypes.Create, ""))
202183

203184
# If we can't find the create event, assume we've hit a dead end
204185
if not create_id:
205186
raise NotFoundError("Unknown room %s" % (room_id,))
206187

207188
# Retrieve the room's create event and return
208-
create_event = self.get_event_txn(txn, create_id)
189+
create_event = await self.get_event(create_id)
209190
return create_event
210191

211192
@cached(max_entries=100000, iterable=True)
@@ -219,35 +200,21 @@ async def get_current_state_ids(self, room_id: str) -> StateMap[str]:
219200
Returns:
220201
The current state of the room.
221202
"""
222-
return await self.db_pool.runInteraction(
223-
"get_current_state_ids_txn",
224-
self.get_current_state_ids_txn,
225-
room_id,
226-
)
227-
228-
def get_current_state_ids_txn(
229-
self, txn: LoggingTransaction, room_id: str
230-
) -> StateMap[str]:
231-
"""Get the current state event ids for a room based on the
232-
current_state_events table.
233203

234-
Args:
235-
txn: Transaction object
236-
room_id: The room to get the state IDs of.
204+
def _get_current_state_ids_txn(txn):
205+
txn.execute(
206+
"""SELECT type, state_key, event_id FROM current_state_events
207+
WHERE room_id = ?
208+
""",
209+
(room_id,),
210+
)
237211

238-
Returns:
239-
The current state of the room.
240-
"""
212+
return {(intern_string(r[0]), intern_string(r[1])): r[2] for r in txn}
241213

242-
txn.execute(
243-
"""SELECT type, state_key, event_id FROM current_state_events
244-
WHERE room_id = ?
245-
""",
246-
(room_id,),
214+
return await self.db_pool.runInteraction(
215+
"get_current_state_ids", _get_current_state_ids_txn
247216
)
248217

249-
return {(intern_string(r[0]), intern_string(r[1])): r[2] for r in txn}
250-
251218
# FIXME: how should this be cached?
252219
async def get_filtered_current_state_ids(
253220
self, room_id: str, state_filter: Optional[StateFilter] = None

0 commit comments

Comments
 (0)