mirror of
https://github.com/element-hq/synapse
synced 2024-09-04 11:20:07 +00:00
Make get_joined_users faster
This commit is contained in:
parent
3033261891
commit
7ebf518c02
1 changed files with 38 additions and 16 deletions
|
@ -417,25 +417,47 @@ class RoomMemberStore(SQLBaseStore):
|
|||
if key[0] == EventTypes.Member
|
||||
]
|
||||
|
||||
rows = yield self._simple_select_many_batch(
|
||||
table="room_memberships",
|
||||
column="event_id",
|
||||
iterable=member_event_ids,
|
||||
retcols=['user_id', 'display_name', 'avatar_url'],
|
||||
keyvalues={
|
||||
"membership": Membership.JOIN,
|
||||
},
|
||||
batch_size=500,
|
||||
desc="_get_joined_users_from_context",
|
||||
event_map = self._get_events_from_cache(
|
||||
member_event_ids,
|
||||
allow_rejected=False,
|
||||
)
|
||||
|
||||
users_in_room = {
|
||||
to_ascii(row["user_id"]): ProfileInfo(
|
||||
avatar_url=to_ascii(row["avatar_url"]),
|
||||
display_name=to_ascii(row["display_name"]),
|
||||
missing_member_event_ids = []
|
||||
users_in_room = {}
|
||||
for event_id, ev_entry in event_map.iteritems():
|
||||
if event_id:
|
||||
if ev_entry.event.membership == Membership.JOIN:
|
||||
users_in_room[to_ascii(ev_entry.event.state_key)] = ProfileInfo(
|
||||
display_name=to_ascii(
|
||||
ev_entry.event.content.get("displayname", None)
|
||||
),
|
||||
avatar_url=to_ascii(
|
||||
ev_entry.event.content.get("avatar_url", None)
|
||||
),
|
||||
)
|
||||
else:
|
||||
missing_member_event_ids.append(event_id)
|
||||
|
||||
if missing_member_event_ids:
|
||||
rows = yield self._simple_select_many_batch(
|
||||
table="room_memberships",
|
||||
column="event_id",
|
||||
iterable=member_event_ids,
|
||||
retcols=('user_id', 'display_name', 'avatar_url',),
|
||||
keyvalues={
|
||||
"membership": Membership.JOIN,
|
||||
},
|
||||
batch_size=500,
|
||||
desc="_get_joined_users_from_context",
|
||||
)
|
||||
for row in rows
|
||||
}
|
||||
|
||||
users_in_room.update({
|
||||
to_ascii(row["user_id"]): ProfileInfo(
|
||||
avatar_url=to_ascii(row["avatar_url"]),
|
||||
display_name=to_ascii(row["display_name"]),
|
||||
)
|
||||
for row in rows
|
||||
})
|
||||
|
||||
if event is not None and event.type == EventTypes.Member:
|
||||
if event.membership == Membership.JOIN:
|
||||
|
|
Loading…
Reference in a new issue