summary refs log tree commit diff
path: root/synapse/storage/roommember.py
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <paul@matrix.org>2015-02-19 17:29:39 +0000
committerPaul "LeoNerd" Evans <paul@matrix.org>2015-02-19 17:29:39 +0000
commit077d20034278ea57c57d501de11bfb1f0c7f9603 (patch)
tree3af364a930c06ba8cb3c1bdaa825d762ac2ae2b2 /synapse/storage/roommember.py
parentPull out the 'get_rooms_for_user' cache logic into a reĆ¼sable @cached decorator (diff)
downloadsynapse-077d20034278ea57c57d501de11bfb1f0c7f9603.tar.xz
Move @cached decorator out into synapse.storage._base; add minimal docs
Diffstat (limited to 'synapse/storage/roommember.py')
-rw-r--r--synapse/storage/roommember.py28
1 files changed, 1 insertions, 27 deletions
diff --git a/synapse/storage/roommember.py b/synapse/storage/roommember.py
index 569bd55d0f..b8fcc1927e 100644
--- a/synapse/storage/roommember.py
+++ b/synapse/storage/roommember.py
@@ -17,7 +17,7 @@ from twisted.internet import defer
 
 from collections import namedtuple
 
-from ._base import SQLBaseStore
+from ._base import SQLBaseStore, cached
 
 from synapse.api.constants import Membership
 from synapse.types import UserID
@@ -33,32 +33,6 @@ RoomsForUser = namedtuple(
 )
 
 
-# TODO(paul):
-#  * Move this somewhere higher-level, shared;
-#  * more generic key management
-#  * export monitoring stats
-#  * maximum size; just evict things at random, or consider LRU?
-def cached(orig):
-    cache = {}
-
-    @defer.inlineCallbacks
-    def wrapped(self, key):
-        if key in cache:
-            defer.returnValue(cache[key])
-
-        ret = yield orig(self, key)
-
-        cache[key] = ret;
-        defer.returnValue(ret)
-
-    def invalidate(key):
-        if key in cache:
-            del cache[key]
-
-    wrapped.invalidate = invalidate
-    return wrapped
-
-
 class RoomMemberStore(SQLBaseStore):
 
     def __init__(self, *args, **kw):