diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index a54f163c0a..978d3ee39f 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -889,7 +889,11 @@ class RoomCreationHandler:
# override any attempt to set room versions via the creation_content
creation_content["room_version"] = room_version.identifier
- last_stream_id = await self._send_events_for_new_room(
+ (
+ last_stream_id,
+ last_sent_event_id,
+ depth,
+ ) = await self._send_events_for_new_room(
requester,
room_id,
preset_config=preset_config,
@@ -905,7 +909,7 @@ class RoomCreationHandler:
if "name" in config:
name = config["name"]
(
- _,
+ name_event,
last_stream_id,
) = await self.event_creation_handler.create_and_send_nonmember_event(
requester,
@@ -917,12 +921,16 @@ class RoomCreationHandler:
"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,
@@ -934,7 +942,11 @@ class RoomCreationHandler:
"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.
@@ -949,7 +961,7 @@ class RoomCreationHandler:
for invitee in invite_list:
(
- _,
+ member_event_id,
last_stream_id,
) = await self.room_member_handler.update_membership_locked(
requester,
@@ -959,7 +971,11 @@ class RoomCreationHandler:
ratelimit=False,
content=content,
new_room=True,
+ prev_event_ids=[last_sent_event_id],
+ depth=depth,
)
+ last_sent_event_id = member_event_id
+ depth += 1
for invite_3pid in invite_3pid_list:
id_server = invite_3pid["id_server"]
@@ -968,7 +984,10 @@ class RoomCreationHandler:
medium = invite_3pid["medium"]
# Note that do_3pid_invite can raise a ShadowBanError, but this was
# handled above by emptying invite_3pid_list.
- last_stream_id = await self.hs.get_room_member_handler().do_3pid_invite(
+ (
+ member_event_id,
+ last_stream_id,
+ ) = await self.hs.get_room_member_handler().do_3pid_invite(
room_id,
requester.user,
medium,
@@ -977,7 +996,11 @@ class RoomCreationHandler:
requester,
txn_id=None,
id_access_token=id_access_token,
+ prev_event_ids=[last_sent_event_id],
+ depth=depth,
)
+ last_sent_event_id = member_event_id
+ depth += 1
result = {"room_id": room_id}
@@ -1005,20 +1028,22 @@ class RoomCreationHandler:
power_level_content_override: Optional[JsonDict] = None,
creator_join_profile: Optional[JsonDict] = None,
ratelimit: bool = True,
- ) -> int:
+ ) -> Tuple[int, str, int]:
"""Sends the initial events into a new room.
`power_level_content_override` doesn't apply when initial state has
power level state event content.
Returns:
- The stream_id of the last event persisted.
+ A tuple containing the stream ID, event ID and depth of the last
+ event sent to the room.
"""
creator_id = creator.user.to_string()
event_keys = {"room_id": room_id, "sender": creator_id, "state_key": ""}
+ depth = 1
last_sent_event_id: Optional[str] = None
def create(etype: str, content: JsonDict, **kwargs: Any) -> JsonDict:
@@ -1031,6 +1056,7 @@ class RoomCreationHandler:
async def send(etype: str, content: JsonDict, **kwargs: Any) -> int:
nonlocal last_sent_event_id
+ nonlocal depth
event = create(etype, content, **kwargs)
logger.debug("Sending %s in new room", etype)
@@ -1047,9 +1073,11 @@ class RoomCreationHandler:
# Note: we don't pass state_event_ids here because this triggers
# an additional query per event to look them up from the events table.
prev_event_ids=[last_sent_event_id] if last_sent_event_id else [],
+ depth=depth,
)
last_sent_event_id = sent_event.event_id
+ depth += 1
return last_stream_id
@@ -1075,6 +1103,7 @@ class RoomCreationHandler:
content=creator_join_profile,
new_room=True,
prev_event_ids=[last_sent_event_id],
+ depth=depth,
)
last_sent_event_id = member_event_id
@@ -1168,7 +1197,7 @@ class RoomCreationHandler:
content={"algorithm": RoomEncryptionAlgorithms.DEFAULT},
)
- return last_sent_stream_id
+ return last_sent_stream_id, last_sent_event_id, depth
def _generate_room_id(self) -> str:
"""Generates a random room ID.
|