summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-08-12 10:13:35 +0100
committerErik Johnston <erik@matrix.org>2015-08-12 10:13:35 +0100
commit4807616e1615bdaaee56f800ba682d0d019de610 (patch)
tree568f2ada12f2cb6c2f23672ee74818ff14e92433
parentMove all the caches into their own package, synapse.util.caches (diff)
downloadsynapse-4807616e1615bdaaee56f800ba682d0d019de610.tar.xz
Wire up the dictionarycache to the metrics
-rw-r--r--synapse/util/caches/__init__.py13
-rw-r--r--synapse/util/caches/descriptors.py17
-rw-r--r--synapse/util/caches/dictionary_cache.py56
3 files changed, 41 insertions, 45 deletions
diff --git a/synapse/util/caches/__init__.py b/synapse/util/caches/__init__.py
index 1a84d94cd9..da0e06a468 100644
--- a/synapse/util/caches/__init__.py
+++ b/synapse/util/caches/__init__.py
@@ -12,3 +12,16 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+
+import synapse.metrics
+
+DEBUG_CACHES = False
+
+metrics = synapse.metrics.get_metrics_for("synapse.util.caches")
+
+caches_by_name = {}
+cache_counter = metrics.register_cache(
+    "cache",
+    lambda: {(name,): len(caches_by_name[name]) for name in caches_by_name.keys()},
+    labels=["name"],
+)
diff --git a/synapse/util/caches/descriptors.py b/synapse/util/caches/descriptors.py
index 82dd09cf5e..c99fda849e 100644
--- a/synapse/util/caches/descriptors.py
+++ b/synapse/util/caches/descriptors.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2014, 2015 OpenMarket Ltd
+# Copyright 2015 OpenMarket Ltd
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -17,7 +17,8 @@ import logging
 from synapse.util.async import ObservableDeferred
 from synapse.util import unwrapFirstError
 from synapse.util.caches.lrucache import LruCache
-import synapse.metrics
+
+from . import caches_by_name, DEBUG_CACHES, cache_counter
 
 from twisted.internet import defer
 
@@ -30,18 +31,6 @@ import threading
 logger = logging.getLogger(__name__)
 
 
-DEBUG_CACHES = False
-
-metrics = synapse.metrics.get_metrics_for("synapse.util.caches")
-
-caches_by_name = {}
-cache_counter = metrics.register_cache(
-    "cache",
-    lambda: {(name,): len(caches_by_name[name]) for name in caches_by_name.keys()},
-    labels=["name"],
-)
-
-
 _CacheSentinel = object()
 
 
diff --git a/synapse/util/caches/dictionary_cache.py b/synapse/util/caches/dictionary_cache.py
index 26d464f4f7..e69adf62fe 100644
--- a/synapse/util/caches/dictionary_cache.py
+++ b/synapse/util/caches/dictionary_cache.py
@@ -15,6 +15,7 @@
 
 from synapse.util.caches.lrucache import LruCache
 from collections import namedtuple
+from . import caches_by_name, cache_counter
 import threading
 import logging
 
@@ -42,6 +43,7 @@ class DictionaryCache(object):
             __slots__ = []
 
         self.sentinel = Sentinel()
+        caches_by_name[name] = self.cache
 
     def check_thread(self):
         expected_thread = self.thread
@@ -54,25 +56,21 @@ class DictionaryCache(object):
                 )
 
     def get(self, key, dict_keys=None):
-        try:
-            entry = self.cache.get(key, self.sentinel)
-            if entry is not self.sentinel:
-                # cache_counter.inc_hits(self.name)
-
-                if dict_keys is None:
-                    return DictionaryEntry(entry.full, dict(entry.value))
-                else:
-                    return DictionaryEntry(entry.full, {
-                        k: entry.value[k]
-                        for k in dict_keys
-                        if k in entry.value
-                    })
-
-            # cache_counter.inc_misses(self.name)
-            return DictionaryEntry(False, {})
-        except:
-            logger.exception("get failed")
-            raise
+        entry = self.cache.get(key, self.sentinel)
+        if entry is not self.sentinel:
+            cache_counter.inc_hits(self.name)
+
+            if dict_keys is None:
+                return DictionaryEntry(entry.full, dict(entry.value))
+            else:
+                return DictionaryEntry(entry.full, {
+                    k: entry.value[k]
+                    for k in dict_keys
+                    if k in entry.value
+                })
+
+        cache_counter.inc_misses(self.name)
+        return DictionaryEntry(False, {})
 
     def invalidate(self, key):
         self.check_thread()
@@ -88,18 +86,14 @@ class DictionaryCache(object):
         self.cache.clear()
 
     def update(self, sequence, key, value, full=False):
-        try:
-            self.check_thread()
-            if self.sequence == sequence:
-                # Only update the cache if the caches sequence number matches the
-                # number that the cache had before the SELECT was started (SYN-369)
-                if full:
-                    self._insert(key, value)
-                else:
-                    self._update_or_insert(key, value)
-        except:
-            logger.exception("update failed")
-            raise
+        self.check_thread()
+        if self.sequence == sequence:
+            # Only update the cache if the caches sequence number matches the
+            # number that the cache had before the SELECT was started (SYN-369)
+            if full:
+                self._insert(key, value)
+            else:
+                self._update_or_insert(key, value)
 
     def _update_or_insert(self, key, value):
         entry = self.cache.setdefault(key, DictionaryEntry(False, {}))