element-hq / element-hq/synapse
Rejected history visibility events are still referenced
- 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
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