Allow creating an LruCache that's not affected by cache factor
parent
fa56e16c85
commit
83cf583adf
|
@ -75,7 +75,10 @@ class EventsWorkerStore(SQLBaseStore):
|
||||||
super(EventsWorkerStore, self).__init__(database, db_conn, hs)
|
super(EventsWorkerStore, self).__init__(database, db_conn, hs)
|
||||||
|
|
||||||
self._get_event_cache = Cache(
|
self._get_event_cache = Cache(
|
||||||
"*getEvent*", keylen=3, max_entries=hs.config.caches.event_cache_size
|
"*getEvent*",
|
||||||
|
keylen=3,
|
||||||
|
max_entries=hs.config.caches.event_cache_size,
|
||||||
|
apply_cache_factor_from_config=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._event_fetch_lock = threading.Condition()
|
self._event_fetch_lock = threading.Condition()
|
||||||
|
|
|
@ -88,7 +88,15 @@ class Cache(object):
|
||||||
"_pending_deferred_cache",
|
"_pending_deferred_cache",
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, name, max_entries=1000, keylen=1, tree=False, iterable=False):
|
def __init__(
|
||||||
|
self,
|
||||||
|
name,
|
||||||
|
max_entries=1000,
|
||||||
|
keylen=1,
|
||||||
|
tree=False,
|
||||||
|
iterable=False,
|
||||||
|
apply_cache_factor_from_config=True,
|
||||||
|
):
|
||||||
cache_type = TreeCache if tree else dict
|
cache_type = TreeCache if tree else dict
|
||||||
self._pending_deferred_cache = cache_type()
|
self._pending_deferred_cache = cache_type()
|
||||||
|
|
||||||
|
@ -98,6 +106,7 @@ class Cache(object):
|
||||||
cache_type=cache_type,
|
cache_type=cache_type,
|
||||||
size_callback=(lambda d: len(d)) if iterable else None,
|
size_callback=(lambda d: len(d)) if iterable else None,
|
||||||
evicted_callback=self._on_evicted,
|
evicted_callback=self._on_evicted,
|
||||||
|
apply_cache_factor_from_config=apply_cache_factor_from_config,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
|
@ -52,11 +52,11 @@ class ExpiringCache(object):
|
||||||
an item on access. Defaults to False.
|
an item on access. Defaults to False.
|
||||||
iterable (bool): If true, the size is calculated by summing the
|
iterable (bool): If true, the size is calculated by summing the
|
||||||
sizes of all entries, rather than the number of entries.
|
sizes of all entries, rather than the number of entries.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self._cache_name = cache_name
|
self._cache_name = cache_name
|
||||||
|
|
||||||
self._original_max_size = max_len
|
self._original_max_size = max_len
|
||||||
|
|
||||||
self._max_size = int(max_len * cache_config.properties.default_factor_size)
|
self._max_size = int(max_len * cache_config.properties.default_factor_size)
|
||||||
|
|
||||||
self._clock = clock
|
self._clock = clock
|
||||||
|
|
|
@ -57,6 +57,7 @@ class LruCache(object):
|
||||||
cache_type=dict,
|
cache_type=dict,
|
||||||
size_callback=None,
|
size_callback=None,
|
||||||
evicted_callback=None,
|
evicted_callback=None,
|
||||||
|
apply_cache_factor_from_config=True,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
|
@ -73,13 +74,22 @@ class LruCache(object):
|
||||||
evicted_callback (func(int)|None):
|
evicted_callback (func(int)|None):
|
||||||
if not None, called on eviction with the size of the evicted
|
if not None, called on eviction with the size of the evicted
|
||||||
entry
|
entry
|
||||||
|
|
||||||
|
apply_cache_factor_from_config (bool): If true, `max_size` will be
|
||||||
|
multiplied by a cache factor derived from the homeserver config.
|
||||||
"""
|
"""
|
||||||
cache = cache_type()
|
cache = cache_type()
|
||||||
self.cache = cache # Used for introspection.
|
self.cache = cache # Used for introspection.
|
||||||
|
|
||||||
# Save the original max size, and apply the default size factor.
|
# Save the original max size, and apply the default size factor.
|
||||||
self._original_max_size = max_size
|
self._original_max_size = max_size
|
||||||
self.max_size = int(max_size * cache_config.properties.default_factor_size)
|
# We previously didn't apply the cache factor here, and as such some caches were
|
||||||
|
# not affected by the global cache factor. Add an option here to disable applying
|
||||||
|
# the cache factor when a cache is created
|
||||||
|
if apply_cache_factor_from_config:
|
||||||
|
self.max_size = int(max_size * cache_config.properties.default_factor_size)
|
||||||
|
else:
|
||||||
|
self.max_size = int(max_size)
|
||||||
|
|
||||||
list_root = _Node(None, None, None, None)
|
list_root = _Node(None, None, None, None)
|
||||||
list_root.next_node = list_root
|
list_root.next_node = list_root
|
||||||
|
|
Loading…
Reference in New Issue