Remove the unused inlineCallbacks code-paths in the caching code (#8119)

code_spécifique_watcha
Patrick Cloke 4 years ago committed by GitHub
parent 76d21d14a0
commit d294f0e7e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      changelog.d/8119.misc
  2. 54
      synapse/util/caches/descriptors.py
  3. 12
      tests/util/caches/test_descriptors.py

@ -0,0 +1 @@
Convert various parts of the codebase to async/await.

@ -285,16 +285,9 @@ class Cache(object):
class _CacheDescriptorBase(object):
def __init__(
self, orig: _CachedFunction, num_args, inlineCallbacks, cache_context=False
):
def __init__(self, orig: _CachedFunction, num_args, cache_context=False):
self.orig = orig
if inlineCallbacks:
self.function_to_call = defer.inlineCallbacks(orig)
else:
self.function_to_call = orig
arg_spec = inspect.getfullargspec(orig)
all_args = arg_spec.args
@ -364,7 +357,7 @@ class CacheDescriptor(_CacheDescriptorBase):
invalidated) by adding a special "cache_context" argument to the function
and passing that as a kwarg to all caches called. For example::
@cachedInlineCallbacks(cache_context=True)
@cached(cache_context=True)
def foo(self, key, cache_context):
r1 = yield self.bar1(key, on_invalidate=cache_context.invalidate)
r2 = yield self.bar2(key, on_invalidate=cache_context.invalidate)
@ -382,17 +375,11 @@ class CacheDescriptor(_CacheDescriptorBase):
max_entries=1000,
num_args=None,
tree=False,
inlineCallbacks=False,
cache_context=False,
iterable=False,
):
super(CacheDescriptor, self).__init__(
orig,
num_args=num_args,
inlineCallbacks=inlineCallbacks,
cache_context=cache_context,
)
super().__init__(orig, num_args=num_args, cache_context=cache_context)
self.max_entries = max_entries
self.tree = tree
@ -465,9 +452,7 @@ class CacheDescriptor(_CacheDescriptorBase):
observer = defer.succeed(cached_result_d)
except KeyError:
ret = defer.maybeDeferred(
preserve_fn(self.function_to_call), obj, *args, **kwargs
)
ret = defer.maybeDeferred(preserve_fn(self.orig), obj, *args, **kwargs)
def onErr(f):
cache.invalidate(cache_key)
@ -510,9 +495,7 @@ class CacheListDescriptor(_CacheDescriptorBase):
of results.
"""
def __init__(
self, orig, cached_method_name, list_name, num_args=None, inlineCallbacks=False
):
def __init__(self, orig, cached_method_name, list_name, num_args=None):
"""
Args:
orig (function)
@ -521,12 +504,8 @@ class CacheListDescriptor(_CacheDescriptorBase):
num_args (int): number of positional arguments (excluding ``self``,
but including list_name) to use as cache keys. Defaults to all
named args of the function.
inlineCallbacks (bool): Whether orig is a generator that should
be wrapped by defer.inlineCallbacks
"""
super(CacheListDescriptor, self).__init__(
orig, num_args=num_args, inlineCallbacks=inlineCallbacks
)
super().__init__(orig, num_args=num_args)
self.list_name = list_name
@ -631,7 +610,7 @@ class CacheListDescriptor(_CacheDescriptorBase):
cached_defers.append(
defer.maybeDeferred(
preserve_fn(self.function_to_call), **args_to_call
preserve_fn(self.orig), **args_to_call
).addCallbacks(complete_all, errback)
)
@ -695,21 +674,7 @@ def cached(
)
def cachedInlineCallbacks(
max_entries=1000, num_args=None, tree=False, cache_context=False, iterable=False
):
return lambda orig: CacheDescriptor(
orig,
max_entries=max_entries,
num_args=num_args,
tree=tree,
inlineCallbacks=True,
cache_context=cache_context,
iterable=iterable,
)
def cachedList(cached_method_name, list_name, num_args=None, inlineCallbacks=False):
def cachedList(cached_method_name, list_name, num_args=None):
"""Creates a descriptor that wraps a function in a `CacheListDescriptor`.
Used to do batch lookups for an already created cache. A single argument
@ -725,8 +690,6 @@ def cachedList(cached_method_name, list_name, num_args=None, inlineCallbacks=Fal
do batch lookups in the cache.
num_args (int): Number of arguments to use as the key in the cache
(including list_name). Defaults to all named parameters.
inlineCallbacks (bool): Should the function be wrapped in an
`defer.inlineCallbacks`?
Example:
@ -744,5 +707,4 @@ def cachedList(cached_method_name, list_name, num_args=None, inlineCallbacks=Fal
cached_method_name=cached_method_name,
list_name=list_name,
num_args=num_args,
inlineCallbacks=inlineCallbacks,
)

@ -366,11 +366,11 @@ class CachedListDescriptorTestCase(unittest.TestCase):
def fn(self, arg1, arg2):
pass
@descriptors.cachedList("fn", "args1", inlineCallbacks=True)
def list_fn(self, args1, arg2):
@descriptors.cachedList("fn", "args1")
async def list_fn(self, args1, arg2):
assert current_context().request == "c1"
# we want this to behave like an asynchronous function
yield run_on_reactor()
await run_on_reactor()
assert current_context().request == "c1"
return self.mock(args1, arg2)
@ -416,10 +416,10 @@ class CachedListDescriptorTestCase(unittest.TestCase):
def fn(self, arg1, arg2):
pass
@descriptors.cachedList("fn", "args1", inlineCallbacks=True)
def list_fn(self, args1, arg2):
@descriptors.cachedList("fn", "args1")
async def list_fn(self, args1, arg2):
# we want this to behave like an asynchronous function
yield run_on_reactor()
await run_on_reactor()
return self.mock(args1, arg2)
obj = Cls()

Loading…
Cancel
Save