Do not include rooms with an unknown room version in a sync response. (#10644)

A user will still see this room if it is in a local cache, but it will
not reappear if clearing the cache and reloading.
This commit is contained in:
Patrick Cloke 2021-08-19 11:12:55 -04:00 committed by GitHub
parent b5fef6054a
commit 000aa89be6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 145 additions and 11 deletions

View file

@ -1,5 +1,4 @@
# Copyright 2015, 2016 OpenMarket Ltd
# Copyright 2018, 2019 New Vector Ltd
# Copyright 2015-2021 The Matrix.org Foundation C.I.C.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -31,6 +30,7 @@ from prometheus_client import Counter
from synapse.api.constants import AccountDataTypes, EventTypes, Membership
from synapse.api.filtering import FilterCollection
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS
from synapse.events import EventBase
from synapse.logging.context import current_context
from synapse.logging.opentracing import SynapseTags, log_kv, set_tag, start_active_span
@ -1843,6 +1843,9 @@ class SyncHandler:
knocked = []
for event in room_list:
if event.room_version_id not in KNOWN_ROOM_VERSIONS:
continue
if event.membership == Membership.JOIN:
room_entries.append(
RoomSyncResultBuilder(

View file

@ -386,9 +386,10 @@ class RoomMemberWorkerStore(EventsWorkerStore):
)
sql = """
SELECT room_id, e.sender, c.membership, event_id, e.stream_ordering
SELECT room_id, e.sender, c.membership, event_id, e.stream_ordering, r.room_version
FROM local_current_membership AS c
INNER JOIN events AS e USING (room_id, event_id)
INNER JOIN rooms AS r USING (room_id)
WHERE
user_id = ?
AND %s
@ -397,7 +398,7 @@ class RoomMemberWorkerStore(EventsWorkerStore):
)
txn.execute(sql, (user_id, *args))
results = [RoomsForUser(**r) for r in self.db_pool.cursor_to_dict(txn)]
results = [RoomsForUser(*r) for r in txn]
return results
@ -447,7 +448,8 @@ class RoomMemberWorkerStore(EventsWorkerStore):
Returns:
Returns the rooms the user is in currently, along with the stream
ordering of the most recent join for that user and room.
ordering of the most recent join for that user and room, along with
the room version of the room.
"""
return await self.db_pool.runInteraction(
"get_rooms_for_user_with_stream_ordering",

View file

@ -30,6 +30,7 @@ class RoomsForUser:
membership: str
event_id: str
stream_ordering: int
room_version_id: str
@attr.s(slots=True, frozen=True, weakref_slot=False, auto_attribs=True)