summary refs log tree commit diff
path: root/synapse/util
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-06-02 11:52:32 +0100
committerErik Johnston <erik@matrix.org>2016-06-03 11:19:22 +0100
commite043ede4a2f18a47b67bf19368600183554824f7 (patch)
tree37f0f00d796f7f40fea67c81e6747eaca96b00fc /synapse/util
parentMake cachedList go a bit faster (diff)
downloadsynapse-e043ede4a2f18a47b67bf19368600183554824f7.tar.xz
Small optimisation to CacheListDescriptor
Diffstat (limited to 'synapse/util')
-rw-r--r--synapse/util/async.py9
-rw-r--r--synapse/util/caches/descriptors.py4
2 files changed, 11 insertions, 2 deletions
diff --git a/synapse/util/async.py b/synapse/util/async.py

index 0d6f48e2d8..40be7fe7e3 100644 --- a/synapse/util/async.py +++ b/synapse/util/async.py
@@ -102,6 +102,15 @@ class ObservableDeferred(object): def observers(self): return self._observers + def has_called(self): + return self._result is not None + + def has_succeeded(self): + return self._result is not None and self._result[0] is True + + def get_result(self): + return self._result[1] + def __getattr__(self, name): return getattr(self._deferred, name) diff --git a/synapse/util/caches/descriptors.py b/synapse/util/caches/descriptors.py
index 4bbb16ed3c..5be4097279 100644 --- a/synapse/util/caches/descriptors.py +++ b/synapse/util/caches/descriptors.py
@@ -311,12 +311,12 @@ class CacheListDescriptor(object): try: res = cache.get(tuple(key)) - if not res.called: + if not res.has_succeeded(): res = res.observe() res.addCallback(lambda r, arg: (arg, r), arg) cached_defers[arg] = res else: - results[arg] = res.result + results[arg] = res.get_result() except KeyError: missing.append(arg)