Merge pull request #2176 from matrix-org/erikj/faster_get_joined
Make get_joined_users faster
This commit is contained in:
commit
66f371e8b8
|
@ -418,25 +418,51 @@ class RoomMemberStore(SQLBaseStore):
|
||||||
if key[0] == EventTypes.Member
|
if key[0] == EventTypes.Member
|
||||||
]
|
]
|
||||||
|
|
||||||
rows = yield self._simple_select_many_batch(
|
# We check if we have any of the member event ids in the event cache
|
||||||
table="room_memberships",
|
# before we ask the DB
|
||||||
column="event_id",
|
|
||||||
iterable=member_event_ids,
|
event_map = self._get_events_from_cache(
|
||||||
retcols=['user_id', 'display_name', 'avatar_url'],
|
member_event_ids,
|
||||||
keyvalues={
|
allow_rejected=False,
|
||||||
"membership": Membership.JOIN,
|
|
||||||
},
|
|
||||||
batch_size=500,
|
|
||||||
desc="_get_joined_users_from_context",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
users_in_room = {
|
missing_member_event_ids = []
|
||||||
to_ascii(row["user_id"]): ProfileInfo(
|
users_in_room = {}
|
||||||
avatar_url=to_ascii(row["avatar_url"]),
|
for event_id in member_event_ids:
|
||||||
display_name=to_ascii(row["display_name"]),
|
ev_entry = event_map.get(event_id)
|
||||||
|
if ev_entry:
|
||||||
|
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=missing_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 is not None and event.type == EventTypes.Member:
|
||||||
if event.membership == Membership.JOIN:
|
if event.membership == Membership.JOIN:
|
||||||
|
|
Loading…
Reference in New Issue