summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorPatrick Cloke <clokep@users.noreply.github.com>2022-12-08 11:35:49 -0500
committerGitHub <noreply@github.com>2022-12-08 11:35:49 -0500
commitda777207528513c858395758bf4c023da2c2c1a3 (patch)
treeafbf8a99fb0577bfab2f9da1c8aa67032f51b318 /synapse
parentBump certifi from 2021.10.8 to 2022.12.7 (#14645) (diff)
downloadsynapse-da777207528513c858395758bf4c023da2c2c1a3.tar.xz
Check the stream position before checking if the cache is empty. (#14639)
An empty cache does not mean the entity has no changed, if
it is earlier than the earliest known stream position return that
the entity *has* changed since the cache cannot accurately
answer that query.
Diffstat (limited to 'synapse')
-rw-r--r--synapse/util/caches/stream_change_cache.py9
1 files changed, 5 insertions, 4 deletions
diff --git a/synapse/util/caches/stream_change_cache.py b/synapse/util/caches/stream_change_cache.py
index c8b17acb59..1657459549 100644
--- a/synapse/util/caches/stream_change_cache.py
+++ b/synapse/util/caches/stream_change_cache.py
@@ -213,16 +213,17 @@ class StreamChangeCache:
         """
         assert isinstance(stream_pos, int)
 
-        if not self._cache:
-            # If the cache is empty, nothing can have changed.
-            return False
-
         # _cache is not valid at or before the earliest known stream position, so
         # return that an entity has changed.
         if stream_pos <= self._earliest_known_stream_pos:
             self.metrics.inc_misses()
             return True
 
+        # If the cache is empty, nothing can have changed.
+        if not self._cache:
+            self.metrics.inc_misses()
+            return False
+
         self.metrics.inc_hits()
         return stream_pos < self._cache.peekitem()[0]