0
0
Fork 1
mirror of https://mau.dev/maunium/synapse.git synced 2024-08-09 04:14:48 +02:00

Merge pull request #546 from matrix-org/erikj/events

Switch over /events to use per room caches
This commit is contained in:
Erik Johnston 2016-02-01 17:23:44 +00:00
commit 7a8ea7e78b
2 changed files with 26 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.order)
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,
@ -598,6 +598,10 @@ class StreamStore(SQLBaseStore):
internal = event.internal_metadata internal = event.internal_metadata
internal.before = str(RoomStreamToken(topo, stream - 1)) internal.before = str(RoomStreamToken(topo, stream - 1))
internal.after = str(RoomStreamToken(topo, stream)) internal.after = str(RoomStreamToken(topo, stream))
internal.order = (
int(topo) if topo else 0,
int(stream),
)
@defer.inlineCallbacks @defer.inlineCallbacks
def get_events_around(self, room_id, event_id, before_limit, after_limit): def get_events_around(self, room_id, event_id, before_limit, after_limit):