summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-02-23 11:54:48 +0000
committerErik Johnston <erik@matrix.org>2016-02-23 16:46:21 +0000
commit278d6c05274288fa964bc52fb656a0f5a26a453f (patch)
tree447ac0d1e6872787a201e9ad3a61cb2b6ce40345
parentCheck presence token interval is less than 100, rather than the token itself (diff)
downloadsynapse-278d6c05274288fa964bc52fb656a0f5a26a453f.tar.xz
Report size of ExpiringCache
Diffstat (limited to '')
-rw-r--r--synapse/util/caches/expiringcache.py15
1 files changed, 13 insertions, 2 deletions
diff --git a/synapse/util/caches/expiringcache.py b/synapse/util/caches/expiringcache.py
index 62cae99649..138cbefff4 100644
--- a/synapse/util/caches/expiringcache.py
+++ b/synapse/util/caches/expiringcache.py
@@ -13,6 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from synapse.util.caches import cache_counter, caches_by_name
+
 import logging
 
 
@@ -47,6 +49,8 @@ class ExpiringCache(object):
 
         self._cache = {}
 
+        caches_by_name[cache_name] = self._cache
+
     def start(self):
         if not self._expiry_ms:
             # Don't bother starting the loop if things never expire
@@ -72,7 +76,11 @@ class ExpiringCache(object):
                 self._cache.pop(k)
 
     def __getitem__(self, key):
-        entry = self._cache[key]
+        try:
+            entry = self._cache[key]
+            cache_counter.inc_hits(self._cache_name)
+        finally:
+            cache_counter.inc_misses(self._cache_name)
 
         if self._reset_expiry_on_get:
             entry.time = self._clock.time_msec()
@@ -105,9 +113,12 @@ class ExpiringCache(object):
 
         logger.debug(
             "[%s] _prune_cache before: %d, after len: %d",
-            self._cache_name, begin_length, len(self._cache.keys())
+            self._cache_name, begin_length, len(self._cache)
         )
 
+    def __len__(self):
+        return len(self._cache)
+
 
 class _CacheEntry(object):
     def __init__(self, time, value):