diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2022-12-08 11:35:49 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-08 11:35:49 -0500 |
commit | da777207528513c858395758bf4c023da2c2c1a3 (patch) | |
tree | afbf8a99fb0577bfab2f9da1c8aa67032f51b318 | |
parent | Bump certifi from 2021.10.8 to 2022.12.7 (#14645) (diff) | |
download | synapse-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.
-rw-r--r-- | changelog.d/14639.bugfix | 1 | ||||
-rw-r--r-- | synapse/util/caches/stream_change_cache.py | 9 | ||||
-rw-r--r-- | tests/util/test_stream_change_cache.py | 7 |
3 files changed, 10 insertions, 7 deletions
diff --git a/changelog.d/14639.bugfix b/changelog.d/14639.bugfix new file mode 100644 index 0000000000..8730b10afe --- /dev/null +++ b/changelog.d/14639.bugfix @@ -0,0 +1 @@ +Fix a long-standing bug where the user directory and room/user stats might be out of sync. 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] diff --git a/tests/util/test_stream_change_cache.py b/tests/util/test_stream_change_cache.py index 0305741c99..3df053493b 100644 --- a/tests/util/test_stream_change_cache.py +++ b/tests/util/test_stream_change_cache.py @@ -144,9 +144,10 @@ class StreamChangeCacheTests(unittest.HomeserverTestCase): """ cache = StreamChangeCache("#test", 1) - # With no entities, it returns False for the past, present, and future. - self.assertFalse(cache.has_any_entity_changed(0)) - self.assertFalse(cache.has_any_entity_changed(1)) + # With no entities, it returns True for the past, present, and False for + # the future. + self.assertTrue(cache.has_any_entity_changed(0)) + self.assertTrue(cache.has_any_entity_changed(1)) self.assertFalse(cache.has_any_entity_changed(2)) # We add an entity |