Make get_joined_users faster

This commit is contained in:
Erik Johnston 2017-05-02 10:43:34 +01:00
parent 3033261891
commit 7ebf518c02

View File

@ -417,11 +417,33 @@ class RoomMemberStore(SQLBaseStore):
if key[0] == EventTypes.Member if key[0] == EventTypes.Member
] ]
event_map = self._get_events_from_cache(
member_event_ids,
allow_rejected=False,
)
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( rows = yield self._simple_select_many_batch(
table="room_memberships", table="room_memberships",
column="event_id", column="event_id",
iterable=member_event_ids, iterable=member_event_ids,
retcols=['user_id', 'display_name', 'avatar_url'], retcols=('user_id', 'display_name', 'avatar_url',),
keyvalues={ keyvalues={
"membership": Membership.JOIN, "membership": Membership.JOIN,
}, },
@ -429,13 +451,13 @@ class RoomMemberStore(SQLBaseStore):
desc="_get_joined_users_from_context", desc="_get_joined_users_from_context",
) )
users_in_room = { users_in_room.update({
to_ascii(row["user_id"]): ProfileInfo( to_ascii(row["user_id"]): ProfileInfo(
avatar_url=to_ascii(row["avatar_url"]), avatar_url=to_ascii(row["avatar_url"]),
display_name=to_ascii(row["display_name"]), display_name=to_ascii(row["display_name"]),
) )
for row in rows 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: