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

Add topic and name events to group of events that are batch persisted when creating a room. #15229

Merged
merged 3 commits into from
Mar 9, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/15229.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add topic and name events to group of events that are batch persisted when creating a room.
89 changes: 34 additions & 55 deletions synapse/handlers/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -569,7 +569,7 @@ async def clone_existing_room(
new_room_id,
# we expect to override all the presets with initial_state, so this is
# somewhat arbitrary.
preset_config=RoomCreationPreset.PRIVATE_CHAT,
room_config={"preset": RoomCreationPreset.PRIVATE_CHAT},
invite_list=[],
initial_state=initial_state,
creation_content=creation_content,
Expand Down Expand Up @@ -904,13 +904,6 @@ async def create_room(
check_membership=False,
)

preset_config = config.get(
"preset",
RoomCreationPreset.PRIVATE_CHAT
if visibility == "private"
else RoomCreationPreset.PUBLIC_CHAT,
)

raw_initial_state = config.get("initial_state", [])

initial_state = OrderedDict()
Expand All @@ -929,7 +922,7 @@ async def create_room(
) = await self._send_events_for_new_room(
requester,
room_id,
preset_config=preset_config,
room_config=config,
invite_list=invite_list,
initial_state=initial_state,
creation_content=creation_content,
Expand All @@ -938,48 +931,6 @@ async def create_room(
creator_join_profile=creator_join_profile,
)

if "name" in config:
name = config["name"]
(
name_event,
last_stream_id,
) = await self.event_creation_handler.create_and_send_nonmember_event(
requester,
{
"type": EventTypes.Name,
"room_id": room_id,
"sender": user_id,
"state_key": "",
"content": {"name": name},
},
ratelimit=False,
prev_event_ids=[last_sent_event_id],
depth=depth,
)
last_sent_event_id = name_event.event_id
depth += 1

if "topic" in config:
topic = config["topic"]
(
topic_event,
last_stream_id,
) = await self.event_creation_handler.create_and_send_nonmember_event(
requester,
{
"type": EventTypes.Topic,
"room_id": room_id,
"sender": user_id,
"state_key": "",
"content": {"topic": topic},
},
ratelimit=False,
prev_event_ids=[last_sent_event_id],
depth=depth,
)
last_sent_event_id = topic_event.event_id
depth += 1

# we avoid dropping the lock between invites, as otherwise joins can
# start coming in and making the createRoom slow.
#
Expand Down Expand Up @@ -1047,7 +998,7 @@ async def _send_events_for_new_room(
self,
creator: Requester,
room_id: str,
preset_config: str,
room_config: JsonDict,
H-Shay marked this conversation as resolved.
Show resolved Hide resolved
invite_list: List[str],
initial_state: MutableStateMap,
creation_content: JsonDict,
Expand All @@ -1068,6 +1019,13 @@ async def _send_events_for_new_room(
A tuple containing the stream ID, event ID and depth of the last
event sent to the room.
"""
visibility = room_config.get("visibility", "private")
clokep marked this conversation as resolved.
Show resolved Hide resolved
preset_config = room_config.get(
"preset",
RoomCreationPreset.PRIVATE_CHAT
if visibility == "private"
else RoomCreationPreset.PUBLIC_CHAT,
)
H-Shay marked this conversation as resolved.
Show resolved Hide resolved

creator_id = creator.user.to_string()
event_keys = {"room_id": room_id, "sender": creator_id, "state_key": ""}
Expand All @@ -1079,9 +1037,6 @@ async def _send_events_for_new_room(
# created (but not persisted to the db) to determine state for future created events
# (as this info can't be pulled from the db)
state_map: MutableStateMap[str] = {}
# current_state_group of last event created. Used for computing event context of
# events to be batched
current_state_group: Optional[int] = None
clokep marked this conversation as resolved.
Show resolved Hide resolved

def create_event_dict(etype: str, content: JsonDict, **kwargs: Any) -> JsonDict:
e = {"type": etype, "content": content}
Expand Down Expand Up @@ -1286,6 +1241,30 @@ async def create_event(
)
events_to_send.append((encryption_event, encryption_context))

if "name" in room_config:
name = room_config["name"]
name_event, name_context = await create_event(
EventTypes.Name,
{"name": name},
True,
room_id=room_id,
sender=creator.user.to_string(),
state_key="",
H-Shay marked this conversation as resolved.
Show resolved Hide resolved
)
events_to_send.append((name_event, name_context))

if "topic" in room_config:
topic = room_config["topic"]
topic_event, topic_context = await create_event(
EventTypes.Topic,
{"topic": topic},
True,
room_id=room_id,
sender=creator.user.to_string(),
state_key="",
)
events_to_send.append((topic_event, topic_context))

datastore = self.hs.get_datastores().state
events_and_context = (
await UnpersistedEventContext.batch_persist_unpersisted_contexts(
Expand Down