element-hq / element-hq/synapse

`get_missing_events` does not respect `min_depth`

Open
#19,812 0 comments 0 reactions 0 assignees View on GitHub
A-Federation A-Performance A-Spec-Compliance O-Frequent S-Tolerable T-Defect
Dominant language
Python
Stars
4.6k
Forks
600
Avg merge
5d 22h
Merged PRs (30d)
51

Description

### Description

The `on_get_missing_events` handler does not respect the `min_depth` field of the `POST /_matrix/federation/v1/get_missing_events/{roomId}` endpoint:
https://github.com/element-hq/synapse/blob/306d8b23bd405802ef668e99420d37f6f8a2ecec/synapse/federation/transport/server/federation.py#L627-L650

This means that Synapse will return potentially significantly more events than the sender requested, wasting time and potentially resulting in even more roundtrips.

### Steps to reproduce

- call `/get_missing_events` with a `min_depth` that is less than some of the events that would be returned
- synapse returns a bunch of events below min_depth

### Homeserver

N/A

### Synapse Version

N/A

### Installation Method

I don't know

### Database

N/A

### Workers

Multiple workers

### Platform

N/A

### Configuration

N/A

### Relevant log output

```shell
2026-05-30T18:28:29.460190Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Attempting to gap fill missing events elapsed=12.959471226s limit=50 via=servername.example iteration=101 discovered=1648 min_depth=68402
2026-05-30T18:28:29.460346Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk:request:fed{dest="servername.example"}: conduwuit_service::federation::execute: Sending request method=POST url=https://matrix.servername.example:8448/_matrix/federation/v1/get_missing_events/!roomid
2026-05-30T18:28:29.534368Z TRACE transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk:request:fed{dest="servername.example"}: conduwuit_service::federation::execute: Received response from https://matrix.servername.example:8448 status=200 OK method=POST request_url=https://matrix.servername.example:8448/_matrix/federation/v1/get_missing_events/!roomid response_url=https://matrix.servername.example:8448/_matrix/federation/v1/get_missing_events/!roomid
2026-05-30T18:28:29.534395Z TRACE transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk:request:fed{dest="servername.example"}: conduwuit_service::federation::execute: Waiting for response body...
2026-05-30T18:28:29.535236Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk:request:fed{dest="servername.example"}: conduwuit_service::federation::execute: Got 200 for POST https://matrix.servername.example:8448/_matrix/federation/v1/get_missing_events/!roomid
2026-05-30T18:28:29.535282Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Got 20 events back from remote elapsed=13.034563404s
2026-05-30T18:28:29.535471Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48622 below min_depth 68402 elapsed=13.034752457s
2026-05-30T18:28:29.535545Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48622 below min_depth 68402 elapsed=13.034826528s
2026-05-30T18:28:29.535608Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48622 below min_depth 68402 elapsed=13.034888886s
2026-05-30T18:28:29.535702Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48622 below min_depth 68402 elapsed=13.034983079s
2026-05-30T18:28:29.535758Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48625 below min_depth 68402 elapsed=13.035038577s
2026-05-30T18:28:29.535846Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48622 below min_depth 68402 elapsed=13.035126887s
2026-05-30T18:28:29.535890Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48622 below min_depth 68402 elapsed=13.035171184s
2026-05-30T18:28:29.535933Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48590 below min_depth 68402 elapsed=13.035214707s
2026-05-30T18:28:29.535987Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48587 below min_depth 68402 elapsed=13.035268002s
2026-05-30T18:28:29.536095Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035376758s
2026-05-30T18:28:29.536152Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035433022s
2026-05-30T18:28:29.536200Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48633 below min_depth 68402 elapsed=13.035481615s
2026-05-30T18:28:29.536280Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035561297s
2026-05-30T18:28:29.536330Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035611791s
2026-05-30T18:28:29.536376Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035657714s
2026-05-30T18:28:29.536430Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035711498s
2026-05-30T18:28:29.536482Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035763367s
2026-05-30T18:28:29.536565Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035846586s
2026-05-30T18:28:29.536623Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035904578s
2026-05-30T18:28:29.536668Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Received PDU with depth 48629 below min_depth 68402 elapsed=13.035948729s
2026-05-30T18:28:29.536675Z TRACE transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}:get_missing_events_bulk: conduwuit_service::rooms::event_handler::fetch_and_handle_outliers: Finished get_missing_events elapsed=13.035956504s
2026-05-30T18:28:29.536682Z DEBUG transaction{id="txnid" origin="servername.example"}:pdu{room_id=!roomid event_id=$eventid}: conduwuit_service::rooms::event_handler::fetch_prev: Fetched 1659 missing events elapsed=13.037008972s
```

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

Synapse does *request* a `min_depth` too: https://github.com/element-hq/synapse/blob/306d8b23bd405802ef668e99420d37f6f8a2ecec/synapse/federation/transport/client.py#L780-L792
and looks like it expects that field to be respected: https://github.com/element-hq/synapse/blob/306d8b23bd405802ef668e99420d37f6f8a2ecec/synapse/handlers/federation_event.py#L307-L329
and `min_depth` is even mentioned soon after too: https://github.com/element-hq/synapse/blob/306d8b23bd405802ef668e99420d37f6f8a2ecec/synapse/handlers/federation_event.py#L344-L352

Contributor guide

Open the contributing guide

Research direction

Start at on_get_missing_events in synapse/federation/transport/server/federation.py and compare its handling with the min_depth request built in synapse/federation/transport/client.py. Read the min_depth expectations in synapse/handlers/federation_event.py; done means the get_missing_events response no longer includes events below the requested depth and the relevant federation behavior is covered by tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api, backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.