Switch over /events to use per room caches

This commit is contained in:
Erik Johnston 2016-02-01 16:26:51 +00:00
parent 2d3837bec7
commit 4bf448be25
2 changed files with 22 additions and 7 deletions

View file

@ -1008,15 +1008,30 @@ class RoomEventSource(object):
limit=limit, limit=limit,
) )
else: else:
events, end_key = yield self.store.get_room_events_stream( room_events = yield self.store.get_room_changes_for_user(
user_id=user.to_string(), user.to_string(), from_key, to_key
)
room_to_events = yield self.store.get_room_events_stream_for_rooms(
room_ids=room_ids,
from_key=from_key, from_key=from_key,
to_key=to_key, to_key=to_key,
limit=limit, limit=limit or 10,
room_ids=room_ids,
is_guest=is_guest,
) )
events = list(room_events)
events.extend(e for evs, _ in room_to_events.values() for e in evs)
events.sort(key=lambda e: e.internal_metadata.after)
if limit:
events[:] = events[:limit]
if events:
end_key = events[-1].internal_metadata.after
else:
end_key = to_key
defer.returnValue((events, end_key)) defer.returnValue((events, end_key))
def get_current_key(self, direction='f'): def get_current_key(self, direction='f'):

View file

@ -39,7 +39,6 @@ from ._base import SQLBaseStore
from synapse.util.caches.descriptors import cachedInlineCallbacks from synapse.util.caches.descriptors import cachedInlineCallbacks
from synapse.api.constants import EventTypes from synapse.api.constants import EventTypes
from synapse.types import RoomStreamToken from synapse.types import RoomStreamToken
from synapse.util.logutils import log_function
import logging import logging
@ -288,11 +287,12 @@ class StreamStore(SQLBaseStore):
get_prev_content=True get_prev_content=True
) )
self._set_before_and_after(ret, rows, topo_order=False)
return ret return ret
return self.runInteraction("get_room_changes_for_user", f) return self.runInteraction("get_room_changes_for_user", f)
@log_function
def get_room_events_stream( def get_room_events_stream(
self, self,
user_id, user_id,