mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-10-01 11:49:51 -04:00
Merge pull request #8593 from matrix-org/rav/cache_hacking/3
Optimisation in DeferredCache.set
This commit is contained in:
commit
15d5553d9e
1
changelog.d/8593.misc
Normal file
1
changelog.d/8593.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
Minor optimisations in caching code.
|
@ -31,6 +31,7 @@ from typing import (
|
|||||||
from prometheus_client import Gauge
|
from prometheus_client import Gauge
|
||||||
|
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
|
from twisted.python import failure
|
||||||
|
|
||||||
from synapse.util.async_helpers import ObservableDeferred
|
from synapse.util.async_helpers import ObservableDeferred
|
||||||
from synapse.util.caches.lrucache import LruCache
|
from synapse.util.caches.lrucache import LruCache
|
||||||
@ -214,9 +215,6 @@ class DeferredCache(Generic[KT, VT]):
|
|||||||
|
|
||||||
callbacks = [callback] if callback else []
|
callbacks = [callback] if callback else []
|
||||||
self.check_thread()
|
self.check_thread()
|
||||||
observable = ObservableDeferred(value, consumeErrors=True)
|
|
||||||
observer = observable.observe()
|
|
||||||
entry = CacheEntry(deferred=observable, callbacks=callbacks)
|
|
||||||
|
|
||||||
existing_entry = self._pending_deferred_cache.pop(key, None)
|
existing_entry = self._pending_deferred_cache.pop(key, None)
|
||||||
if existing_entry:
|
if existing_entry:
|
||||||
@ -224,6 +222,20 @@ class DeferredCache(Generic[KT, VT]):
|
|||||||
|
|
||||||
# XXX: why don't we invalidate the entry in `self.cache` yet?
|
# XXX: why don't we invalidate the entry in `self.cache` yet?
|
||||||
|
|
||||||
|
# we can save a whole load of effort if the deferred is ready.
|
||||||
|
if value.called:
|
||||||
|
result = value.result
|
||||||
|
if not isinstance(result, failure.Failure):
|
||||||
|
self.cache.set(key, result, callbacks)
|
||||||
|
return value
|
||||||
|
|
||||||
|
# otherwise, we'll add an entry to the _pending_deferred_cache for now,
|
||||||
|
# and add callbacks to add it to the cache properly later.
|
||||||
|
|
||||||
|
observable = ObservableDeferred(value, consumeErrors=True)
|
||||||
|
observer = observable.observe()
|
||||||
|
entry = CacheEntry(deferred=observable, callbacks=callbacks)
|
||||||
|
|
||||||
self._pending_deferred_cache[key] = entry
|
self._pending_deferred_cache[key] = entry
|
||||||
|
|
||||||
def compare_and_pop():
|
def compare_and_pop():
|
||||||
|
Loading…
Reference in New Issue
Block a user