element-hq / element-hq/synapse

Rejected history visibility events are still referenced

Open
#19,373 2 comments 0 reactions 0 assignees View on GitHub
A-Federation
Dominant language
Python
Stars
4.6k
Forks
600
Avg merge
5d 22h
Merged PRs (30d)
51

Description

### Description

Rooms with exclusively rejected history visibility events do not allow users to read any past messages. This also causes federation issues with other servers (see tracebacks below). The federation issues will be global, not just for the bad room in specific.

### Steps to reproduce

- join a room with only rejected history visibility events
- observe

### Homeserver

4d2.org, private server

### Synapse Version

1.144.0

### Installation Method

I don't know

### Database

PostgreSQL

### Workers

Multiple workers

### Platform

- Arch Linux
- Other details unknown

### Configuration

_No response_

### Relevant log output

```shell
From 4d2:
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: Traceback (most recent call last):
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: File "/usr/local/lib/python3.13/site-packages/synapse/federation/sender/per_destination_queue.py", line 361, in _transaction_transmission_loop
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: await self._catch_up_transmission_loop()
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: File "/usr/local/lib/python3.13/site-packages/synapse/federation/sender/per_destination_queue.py", line 606, in _catch_up_transmission_loop
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: new_pdus = await filter_events_for_server(
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: ...<7 lines>...
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: )
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: ^
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: File "/usr/local/lib/python3.13/site-packages/synapse/visibility.py", line 731, in filter_events_for_server
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: event_to_history_vis = await _event_to_history_vis(storage, events)
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: File "/usr/local/lib/python3.13/site-packages/synapse/visibility.py", line 801, in _event_to_history_vis
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: vis_event = vis_events[visibility_id]
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: ~~~~~~~~~~^^^^^^^^^^^^^^^
Dec 15 16:07:17 marvin.4d2.org matrix-synapse-worker-federation-sender-2[207746]: KeyError: '$zFmSGmG_h_Gac1LT1Pv9cwIvZCz8hhOYmwygxta86YQ_:vel.fsky.io'

From my own server:
2025-10-07 20:50:02,792 - synapse.http.server - 151 - ERROR - GET-14 - Failed handle request via 'RoomMessageListRestServlet':
Traceback (most recent call last):
File "/usr/lib/python3.13/site-packages/synapse/http/server.py", line 339, in _async_render_wrapper
callback_return = await self._async_render(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/synapse/http/server.py", line 564, in _async_render
callback_return = await raw_callback_return
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/synapse/rest/client/room.py", line 843, in on_GET
msgs = await self.pagination_handler.get_messages(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<5 lines>...
)
^
File "/usr/lib/python3.13/site-packages/synapse/handlers/pagination.py", line 582, in get_messages
did_backfill = await self.hs.get_federation_handler().maybe_backfill(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<3 lines>...
)
^
File "/usr/lib/python3.13/site-packages/synapse/handlers/federation.py", line 225, in maybe_backfill
return await self._maybe_backfill_inner(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<4 lines>...
)
^
File "/usr/lib/python3.13/site-packages/synapse/handlers/federation.py", line 410, in _maybe_backfill_inner
filtered_extremities = await filter_events_for_server(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<7 lines>...
)
^
File "/usr/lib/python3.13/site-packages/synapse/visibility.py", line 703, in filter_events_for_server
event_to_history_vis = await _event_to_history_vis(storage, events)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/site-packages/synapse/visibility.py", line 773, in _event_to_history_vis
vis_event = vis_events[visibility_id]
~~~~~~~~~~^^^^^^^^^^^^^^^
KeyError: '$tRFJntqtkXC_zDws7ykyMrD_VZvc5rOmsau4uJrJeVs_:vona.fsky.io'
2025-10-07 20:50:02,795 - synapse.access.http.8448 - 515 - INFO - GET-14 - ::1 - 8448 - {@vel:velcrohtrfmnahtx4i5ibjcsjnxebvb54umnsdwklwzmmir2cp2ciiqd.onion} Processed request: 0.025sec/0.000sec (0.005sec, 0.001sec) (0.002sec/0.011sec/10) 55B 500 "GET /_matrix/client/v3/rooms/!_7ZFN8nG1psVqxx7HsvfrbZLyWwZPDVjjP4xbFLL05A_%3Avona.fsky.io/messages?limit=80 HTTP/1.1" "Mozilla/5.0 (X11; Linux x86_64; rv:143.0) Gecko/20100101 Firefox/143.0" [2 dbevts]
```

### Anything else that would be useful to know?

_No response_

Contributor guide

Open the contributing guide

Research direction

The traceback points to synapse/visibility.py, with federation sender flow in federation/sender/per_destination_queue.py and backfill through handlers/federation.py. Start by tracing _event_to_history_vis and the referenced history-visibility IDs from those entry points. Done means rooms with only rejected history-visibility events no longer trigger the shown KeyError during message retrieval or federation.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.