Skip to content

Commit 7b8efcc

Browse files
committed
Do not refuse to set read_marker if previous is in wrong room
When the old read marker location happens to be an event_id in a different room, we should not let this prevent a new read marker from being set.
1 parent be65a8e commit 7b8efcc

File tree

3 files changed

+8
-5
lines changed

3 files changed

+8
-5
lines changed

changelog.d/16990.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix case in which `m.fully_read` marker would not get updated.

synapse/handlers/read_marker.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ async def received_client_read_marker(
4848

4949
should_update = True
5050
# Get event ordering, this also ensures we know about the event
51-
event_ordering = await self.store.get_event_ordering(event_id)
51+
event_ordering = await self.store.get_event_ordering(event_id, room_id)
5252

5353
if existing_read_marker:
5454
try:
5555
old_event_ordering = await self.store.get_event_ordering(
56-
existing_read_marker["event_id"]
56+
existing_read_marker["event_id"], room_id
5757
)
5858
except SynapseError:
5959
# Old event no longer exists, assume new is ahead. This may

synapse/storage/databases/main/events_worker.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1989,16 +1989,18 @@ def get_deltas_for_stream_id_txn(
19891989
return rows, to_token, True
19901990

19911991
@cached(max_entries=5000)
1992-
async def get_event_ordering(self, event_id: str) -> Tuple[int, int]:
1992+
async def get_event_ordering(self, event_id: str, room_id: str) -> Tuple[int, int]:
19931993
res = await self.db_pool.simple_select_one(
19941994
table="events",
19951995
retcols=["topological_ordering", "stream_ordering"],
1996-
keyvalues={"event_id": event_id},
1996+
keyvalues={"event_id": event_id, "room_id": room_id},
19971997
allow_none=True,
19981998
)
19991999

20002000
if not res:
2001-
raise SynapseError(404, "Could not find event %s" % (event_id,))
2001+
raise SynapseError(
2002+
404, "Could not find event %s in room %s" % (event_id, room_id)
2003+
)
20022004

20032005
return int(res[0]), int(res[1])
20042006

0 commit comments

Comments
 (0)