MSC3874: Filtering threads from the /messages endpoint

Signed-off-by: Janne Mareike Koschinski <jannemk@element.io>
justjanne/messages-endpoint-threads-filter
Janne Mareike Koschinski 2 years ago
parent f139eee50d
commit 5afe6c31aa
No known key found for this signature in database
GPG Key ID: F05F5F65CB096719

@ -0,0 +1,75 @@
# MSC3874 Loading Messages excluding Threads
## Motivation
In our beta deployment of threads, it's become a noticeable issue where a room may have activity in a long-running
thread while the main timeline is inactive. If a user starts their client and tries to paginate through the main
timeline, loading will feel sluggish, as lots of events have to be loaded that wont be displayed.
## Proposal
### Allow filtering the /messages API to not include threaded messages
This proposal recommends extending the existing [Event filters] are extended with a new filter, named
`not_related_by_rel_types`, which acts exactly like the opposite of the existing `related_by_rel_types` filter.
This means, if this filter is specified, only message which match none of the given relation types will be returned.
```
GET /_matrix/client/v3/rooms/!room_id:domain/messages?filter=...
```
The filter string includes the new fields, above. In this example, the URL encoded JSON is presented unencoded and
formatted for legibility:
```jsonc
{
"types": ["m.room.message"],
"not_related_by_rel_types": ["m.thread"]
}
```
Note that the newly added filtering parameters return events based on information in related events. Consider the
following events in a room:
* `A`: a `m.room.message` event sent by `alice`
* `B`: a `m.room.message` event sent by `bob`
* `C`: a `m.room.message` event sent by `charlie` which relates to `A` with type `m.thread`
Using a filter of `"not_related_by_rel_types": ["m.thread"]` would return only event `B` as it has no event which
relates to it via `m.thread`.
### Server capabilities
Threads might have sporadic support across servers, to simplify feature detections for clients, a homeserver must
advertise unstable support for threads as part of the `/versions` API:
```jsonc
{
"unstable_features": {
"org.matrix.msc3874": true,
// ...
}
}
```
## Potential issues
This proposal moves the loading and processing of these hidden events onto the server. Depending on the servers
architecture, this may have a non-negligible performance impact.
## Alternatives
- A suitable workaround, depending on the ratio of thread-messages compared to main timeline messages in a room, may be
an increase of the page size
## Dependencies
- [MSC2674](https://github.com/matrix-org/matrix-doc/pull/2674)
- [MSC2675](https://github.com/matrix-org/matrix-doc/pull/2675)
- [MSC3567](https://github.com/matrix-org/matrix-doc/pull/3567)
- [MSC3676](https://github.com/matrix-org/matrix-doc/pull/3676)
- [MSC3440](https://github.com/matrix-org/matrix-doc/pull/344ß)
<!-- inline links -->
[Event filters]: https://spec.matrix.org/v1.2/client-server-api/#filtering
Loading…
Cancel
Save