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

Commit 2983049

Browse files
authored
Factor out _send_dummy_event_for_room (#8370)
this makes it possible to use from the manhole, and seems cleaner anyway.
1 parent 91c60f3 commit 2983049

File tree

2 files changed

+55
-48
lines changed

2 files changed

+55
-48
lines changed

changelog.d/8370.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Factor out a `_send_dummy_event_for_room` method.

synapse/handlers/message.py

Lines changed: 54 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,54 +1182,7 @@ async def _send_dummy_events_to_fill_extremities(self):
11821182
)
11831183

11841184
for room_id in room_ids:
1185-
# For each room we need to find a joined member we can use to send
1186-
# the dummy event with.
1187-
1188-
latest_event_ids = await self.store.get_prev_events_for_room(room_id)
1189-
1190-
members = await self.state.get_current_users_in_room(
1191-
room_id, latest_event_ids=latest_event_ids
1192-
)
1193-
dummy_event_sent = False
1194-
for user_id in members:
1195-
if not self.hs.is_mine_id(user_id):
1196-
continue
1197-
requester = create_requester(user_id)
1198-
try:
1199-
event, context = await self.create_event(
1200-
requester,
1201-
{
1202-
"type": "org.matrix.dummy_event",
1203-
"content": {},
1204-
"room_id": room_id,
1205-
"sender": user_id,
1206-
},
1207-
prev_event_ids=latest_event_ids,
1208-
)
1209-
1210-
event.internal_metadata.proactively_send = False
1211-
1212-
# Since this is a dummy-event it is OK if it is sent by a
1213-
# shadow-banned user.
1214-
await self.send_nonmember_event(
1215-
requester,
1216-
event,
1217-
context,
1218-
ratelimit=False,
1219-
ignore_shadow_ban=True,
1220-
)
1221-
dummy_event_sent = True
1222-
break
1223-
except ConsentNotGivenError:
1224-
logger.info(
1225-
"Failed to send dummy event into room %s for user %s due to "
1226-
"lack of consent. Will try another user" % (room_id, user_id)
1227-
)
1228-
except AuthError:
1229-
logger.info(
1230-
"Failed to send dummy event into room %s for user %s due to "
1231-
"lack of power. Will try another user" % (room_id, user_id)
1232-
)
1185+
dummy_event_sent = await self._send_dummy_event_for_room(room_id)
12331186

12341187
if not dummy_event_sent:
12351188
# Did not find a valid user in the room, so remove from future attempts
@@ -1242,6 +1195,59 @@ async def _send_dummy_events_to_fill_extremities(self):
12421195
now = self.clock.time_msec()
12431196
self._rooms_to_exclude_from_dummy_event_insertion[room_id] = now
12441197

1198+
async def _send_dummy_event_for_room(self, room_id: str) -> bool:
1199+
"""Attempt to send a dummy event for the given room.
1200+
1201+
Args:
1202+
room_id: room to try to send an event from
1203+
1204+
Returns:
1205+
True if a dummy event was successfully sent. False if no user was able
1206+
to send an event.
1207+
"""
1208+
1209+
# For each room we need to find a joined member we can use to send
1210+
# the dummy event with.
1211+
latest_event_ids = await self.store.get_prev_events_for_room(room_id)
1212+
members = await self.state.get_current_users_in_room(
1213+
room_id, latest_event_ids=latest_event_ids
1214+
)
1215+
for user_id in members:
1216+
if not self.hs.is_mine_id(user_id):
1217+
continue
1218+
requester = create_requester(user_id)
1219+
try:
1220+
event, context = await self.create_event(
1221+
requester,
1222+
{
1223+
"type": "org.matrix.dummy_event",
1224+
"content": {},
1225+
"room_id": room_id,
1226+
"sender": user_id,
1227+
},
1228+
prev_event_ids=latest_event_ids,
1229+
)
1230+
1231+
event.internal_metadata.proactively_send = False
1232+
1233+
# Since this is a dummy-event it is OK if it is sent by a
1234+
# shadow-banned user.
1235+
await self.send_nonmember_event(
1236+
requester, event, context, ratelimit=False, ignore_shadow_ban=True,
1237+
)
1238+
return True
1239+
except ConsentNotGivenError:
1240+
logger.info(
1241+
"Failed to send dummy event into room %s for user %s due to "
1242+
"lack of consent. Will try another user" % (room_id, user_id)
1243+
)
1244+
except AuthError:
1245+
logger.info(
1246+
"Failed to send dummy event into room %s for user %s due to "
1247+
"lack of power. Will try another user" % (room_id, user_id)
1248+
)
1249+
return False
1250+
12451251
def _expire_rooms_to_exclude_from_dummy_event_insertion(self):
12461252
expire_before = self.clock.time_msec() - _DUMMY_EVENT_ROOM_EXCLUSION_EXPIRY
12471253
to_expire = set()

0 commit comments

Comments
 (0)