Merge pull request #3521 from matrix-org/rav/optimise_stream_change_cache

Reduce set building in get_entities_changed
This commit is contained in:
Richard van der Hoff 2018-07-12 12:08:49 +01:00 committed by GitHub
commit 6dff49b8a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 7 deletions

1
changelog.d/3521.feature Normal file
View File

@ -0,0 +1 @@
Cache optimisation for /sync requests

View File

@ -74,14 +74,18 @@ class StreamChangeCache(object):
assert type(stream_pos) is int assert type(stream_pos) is int
if stream_pos >= self._earliest_known_stream_pos: if stream_pos >= self._earliest_known_stream_pos:
not_known_entities = set(entities) - set(self._entity_to_key) changed_entities = {
self._cache[k] for k in self._cache.islice(
start=self._cache.bisect_right(stream_pos),
)
}
result = ( # we need to include entities which we don't know about, as well as
{self._cache[k] for k in self._cache.islice( # those which are known to have changed since the stream pos.
start=self._cache.bisect_right(stream_pos))} result = {
.intersection(entities) e for e in entities
.union(not_known_entities) if e in changed_entities or e not in self._entity_to_key
) }
self.metrics.inc_hits() self.metrics.inc_hits()
else: else: