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

Commit

Permalink
Remove the unused inlineCallbacks code-paths in the caching code (#8119)
Browse files Browse the repository at this point in the history
  • Loading branch information
clokep authored Aug 19, 2020
1 parent 76d21d1 commit d294f0e
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 52 deletions.
1 change: 1 addition & 0 deletions changelog.d/8119.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Convert various parts of the codebase to async/await.
54 changes: 8 additions & 46 deletions synapse/util/caches/descriptors.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,16 +285,9 @@ def invalidate_all(self):


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

Expand Down Expand Up @@ -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)
Expand All @@ -382,17 +375,11 @@ def __init__(
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
Expand Down Expand Up @@ -465,9 +452,7 @@ def _wrapped(*args, **kwargs):
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)
Expand Down Expand Up @@ -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)
Expand All @@ -521,12 +504,8 @@ def __init__(
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

Expand Down Expand Up @@ -631,7 +610,7 @@ def errback(f):

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)
)

Expand Down Expand Up @@ -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
Expand All @@ -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:
Expand All @@ -744,5 +707,4 @@ def batch_do_something(self, first_arg, second_args):
cached_method_name=cached_method_name,
list_name=list_name,
num_args=num_args,
inlineCallbacks=inlineCallbacks,
)
12 changes: 6 additions & 6 deletions tests/util/caches/test_descriptors.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,11 +366,11 @@ def __init__(self):
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)

Expand Down Expand Up @@ -416,10 +416,10 @@ def __init__(self):
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()
Expand Down

0 comments on commit d294f0e

Please sign in to comment.