mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2024-10-01 08:25:44 -04:00
Merge pull request #1123 from matrix-org/erikj/public_room_cache
Use stream_change cache to make get_forward_extremeties_for_room cache more effective
This commit is contained in:
commit
1535f21eb5
@ -173,7 +173,10 @@ class SlavedEventStore(BaseSlavedStore):
|
|||||||
get_room_max_stream_ordering = DataStore.get_room_max_stream_ordering.__func__
|
get_room_max_stream_ordering = DataStore.get_room_max_stream_ordering.__func__
|
||||||
|
|
||||||
get_forward_extremeties_for_room = (
|
get_forward_extremeties_for_room = (
|
||||||
EventFederationStore.__dict__["get_forward_extremeties_for_room"]
|
DataStore.get_forward_extremeties_for_room.__func__
|
||||||
|
)
|
||||||
|
_get_forward_extremeties_for_room = (
|
||||||
|
EventFederationStore.__dict__["_get_forward_extremeties_for_room"]
|
||||||
)
|
)
|
||||||
|
|
||||||
def stream_positions(self):
|
def stream_positions(self):
|
||||||
|
@ -344,8 +344,17 @@ class EventFederationStore(SQLBaseStore):
|
|||||||
self.get_latest_event_ids_in_room.invalidate, (room_id,)
|
self.get_latest_event_ids_in_room.invalidate, (room_id,)
|
||||||
)
|
)
|
||||||
|
|
||||||
@cached(max_entries=5000, num_args=2)
|
|
||||||
def get_forward_extremeties_for_room(self, room_id, stream_ordering):
|
def get_forward_extremeties_for_room(self, room_id, stream_ordering):
|
||||||
|
# We want to make the cache more effective, so we clamp to the last
|
||||||
|
# change before the given ordering.
|
||||||
|
last_change = self._events_stream_cache.get_pos_of_last_change(room_id)
|
||||||
|
if last_change:
|
||||||
|
stream_ordering = min(last_change, stream_ordering)
|
||||||
|
|
||||||
|
return self._get_forward_extremeties_for_room(room_id, stream_ordering)
|
||||||
|
|
||||||
|
@cached(max_entries=5000, num_args=2)
|
||||||
|
def _get_forward_extremeties_for_room(self, room_id, stream_ordering):
|
||||||
"""For a given room_id and stream_ordering, return the forward
|
"""For a given room_id and stream_ordering, return the forward
|
||||||
extremeties of the room at that point in "time".
|
extremeties of the room at that point in "time".
|
||||||
|
|
||||||
|
@ -121,3 +121,8 @@ class StreamChangeCache(object):
|
|||||||
k, r = self._cache.popitem()
|
k, r = self._cache.popitem()
|
||||||
self._earliest_known_stream_pos = max(k, self._earliest_known_stream_pos)
|
self._earliest_known_stream_pos = max(k, self._earliest_known_stream_pos)
|
||||||
self._entity_to_key.pop(r, None)
|
self._entity_to_key.pop(r, None)
|
||||||
|
|
||||||
|
def get_pos_of_last_change(self, entity):
|
||||||
|
"""Returns the stream pos of the last change for an entitiy, if known.
|
||||||
|
"""
|
||||||
|
return self._entity_to_key.get(entity, None)
|
||||||
|
Loading…
Reference in New Issue
Block a user