forked from MirrorHub/synapse
Merge pull request #3544 from matrix-org/erikj/fixup_stream_cache
Fix perf regression in PR #3530
This commit is contained in:
commit
c7320a5564
3 changed files with 19 additions and 1 deletions
0
changelog.d/3544.misc
Normal file
0
changelog.d/3544.misc
Normal file
|
@ -74,12 +74,14 @@ class StreamChangeCache(object):
|
|||
assert type(stream_pos) is int
|
||||
|
||||
if stream_pos >= self._earliest_known_stream_pos:
|
||||
result = {
|
||||
changed_entities = {
|
||||
self._cache[k] for k in self._cache.islice(
|
||||
start=self._cache.bisect_right(stream_pos),
|
||||
)
|
||||
}
|
||||
|
||||
result = changed_entities.intersection(entities)
|
||||
|
||||
self.metrics.inc_hits()
|
||||
else:
|
||||
result = set(entities)
|
||||
|
|
|
@ -178,6 +178,22 @@ class StreamChangeCacheTests(unittest.TestCase):
|
|||
),
|
||||
)
|
||||
|
||||
# Query a subset of the entries mid-way through the stream. We should
|
||||
# only get back the subset.
|
||||
self.assertEqual(
|
||||
cache.get_entities_changed(
|
||||
[
|
||||
"bar@baz.net",
|
||||
],
|
||||
stream_pos=2,
|
||||
),
|
||||
set(
|
||||
[
|
||||
"bar@baz.net",
|
||||
]
|
||||
),
|
||||
)
|
||||
|
||||
def test_max_pos(self):
|
||||
"""
|
||||
StreamChangeCache.get_max_pos_of_last_change will return the most
|
||||
|
|
Loading…
Reference in a new issue