Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Opt out of cache expiry for get_users_who_share_room_with_user #10826

Merged
merged 3 commits into from
Sep 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelog.d/10826.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Opt out of cache expiry for `get_users_who_share_room_with_user`, to hopefully improve `/sync` performance when you
haven't synced recently.
11 changes: 8 additions & 3 deletions synapse/storage/databases/main/roommember.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ def _check_safe_current_state_events_membership_updated_txn(self, txn):
self._check_safe_current_state_events_membership_updated_txn,
)

@cached(max_entries=100000, iterable=True)
@cached(max_entries=100000, iterable=True, prune_unread_entries=False)
async def get_users_in_room(self, room_id: str) -> List[str]:
return await self.db_pool.runInteraction(
"get_users_in_room", self.get_users_in_room_txn, room_id
Expand Down Expand Up @@ -439,7 +439,7 @@ async def get_local_current_membership_for_user_in_room(

return results_dict.get("membership"), results_dict.get("event_id")

@cached(max_entries=500000, iterable=True)
@cached(max_entries=500000, iterable=True, prune_unread_entries=False)
async def get_rooms_for_user_with_stream_ordering(
self, user_id: str
) -> FrozenSet[GetRoomsForUserWithStreamOrdering]:
Expand Down Expand Up @@ -544,7 +544,12 @@ async def get_rooms_for_user(
)
return frozenset(r.room_id for r in rooms)

@cached(max_entries=500000, cache_context=True, iterable=True)
@cached(
max_entries=500000,
cache_context=True,
iterable=True,
prune_unread_entries=False,
)
async def get_users_who_share_room_with_user(
self, user_id: str, cache_context: _CacheContext
) -> Set[str]:
Expand Down
2 changes: 2 additions & 0 deletions synapse/util/caches/deferred_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ def __init__(
tree: bool = False,
iterable: bool = False,
apply_cache_factor_from_config: bool = True,
prune_unread_entries: bool = True,
):
"""
Args:
Expand Down Expand Up @@ -105,6 +106,7 @@ def metrics_cb() -> None:
size_callback=(lambda d: len(d) or 1) if iterable else None,
metrics_collection_callback=metrics_cb,
apply_cache_factor_from_config=apply_cache_factor_from_config,
prune_unread_entries=prune_unread_entries,
)

self.thread: Optional[threading.Thread] = None
Expand Down
5 changes: 5 additions & 0 deletions synapse/util/caches/descriptors.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ def __init__(
tree=False,
cache_context=False,
iterable=False,
prune_unread_entries: bool = True,
):
super().__init__(orig, num_args=num_args, cache_context=cache_context)

Expand All @@ -269,13 +270,15 @@ def __init__(
self.max_entries = max_entries
self.tree = tree
self.iterable = iterable
self.prune_unread_entries = prune_unread_entries

def __get__(self, obj, owner):
cache: DeferredCache[CacheKey, Any] = DeferredCache(
name=self.orig.__name__,
max_entries=self.max_entries,
tree=self.tree,
iterable=self.iterable,
prune_unread_entries=self.prune_unread_entries,
)

get_cache_key = self.cache_key_builder
Expand Down Expand Up @@ -507,6 +510,7 @@ def cached(
tree: bool = False,
cache_context: bool = False,
iterable: bool = False,
prune_unread_entries: bool = True,
) -> Callable[[F], _CachedFunction[F]]:
func = lambda orig: DeferredCacheDescriptor(
orig,
Expand All @@ -515,6 +519,7 @@ def cached(
tree=tree,
cache_context=cache_context,
iterable=iterable,
prune_unread_entries=prune_unread_entries,
)

return cast(Callable[[F], _CachedFunction[F]], func)
Expand Down
16 changes: 13 additions & 3 deletions synapse/util/caches/lrucache.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,11 @@ def __init__(
cache: "weakref.ReferenceType[LruCache]",
clock: Clock,
callbacks: Collection[Callable[[], None]] = (),
prune_unread_entries: bool = True,
):
self._list_node = ListNode.insert_after(self, root)
self._global_list_node = None
if USE_GLOBAL_LIST:
self._global_list_node: Optional[_TimedListNode] = None
if USE_GLOBAL_LIST and prune_unread_entries:
self._global_list_node = _TimedListNode.insert_after(self, GLOBAL_ROOT)
self._global_list_node.update_last_access(clock)

Expand Down Expand Up @@ -314,6 +315,7 @@ def __init__(
metrics_collection_callback: Optional[Callable[[], None]] = None,
apply_cache_factor_from_config: bool = True,
clock: Optional[Clock] = None,
prune_unread_entries: bool = True,
):
"""
Args:
Expand Down Expand Up @@ -427,7 +429,15 @@ def cache_len():
self.len = synchronized(cache_len)

def add_node(key, value, callbacks: Collection[Callable[[], None]] = ()):
node = _Node(list_root, key, value, weak_ref_to_self, real_clock, callbacks)
node = _Node(
list_root,
key,
value,
weak_ref_to_self,
real_clock,
callbacks,
prune_unread_entries,
)
cache[key] = node

if size_callback:
Expand Down