synapse/tests/rest/client
Erik Johnston dfd00a986f
Fix sliding sync performance slow down for long lived connections. (#19206)
Fixes https://github.com/element-hq/synapse/issues/19175

This PR moves tracking of what lazy loaded membership we've sent to each
room out of the required state table. This avoids that table from
continuously growing, which massively helps performance as we pull out
all matching rows for the connection when we receive a request.

The new table is only read when we have data in a room to send, so we
end up reading a lot fewer rows from the DB. Though we now read from
that table for every room we have events to return in, rather than once
at the start of the request.

For an explanation of how the new table works, see the
[comment](https://github.com/element-hq/synapse/blob/erikj/sss_better_membership_storage2/synapse/storage/schema/main/delta/93/02_sliding_sync_members.sql#L15-L38)
on the table schema.

The table is designed so that we can later prune old entries if we wish,
but that is not implemented in this PR.

Reviewable commit-by-commit.

---------

Co-authored-by: Eric Eastwood <erice@element.io>
2025-12-12 10:02:57 +00:00
..
sliding_sync Fix sliding sync performance slow down for long lived connections. (#19206) 2025-12-12 10:02:57 +00:00
__init__.py Correctly mention previous copyright (#16820) 2024-01-23 11:26:48 +00:00
test_account_data.py Correctly mention previous copyright (#16820) 2024-01-23 11:26:48 +00:00
test_account.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
test_auth_metadata.py Support stable endpoint and scopes from the MSC3861 family (#18549) 2025-09-02 13:55:12 +02:00
test_auth.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
test_capabilities.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_consent.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_delayed_events.py MSC4140: Remove auth from delayed event management endpoints (#19152) 2025-11-13 18:56:17 +00:00
test_devices.py Allow using MSC4190 features without opt-in (#19031) 2025-10-13 13:07:11 +00:00
test_directory.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_ephemeral_message.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_events.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_filter.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_identity.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_keys.py Update KeyUploadServlet to handle case where client sends device_keys: null (#19023) 2025-10-07 16:23:55 +01:00
test_login_token_request.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_login.py Respond with useful error codes when Content-Length header/s are invalid (#19212) 2025-12-08 21:39:18 +00:00
test_matrixrtc.py Add MatrixRTC backend/services discovery endpoint (#18967) 2025-10-09 17:15:47 +01:00
test_media.py Respond with useful error codes when Content-Length header/s are invalid (#19212) 2025-12-08 21:39:18 +00:00
test_models.py Pydantic v2 (#19071) 2025-10-31 09:22:22 +00:00
test_mutual_rooms.py Put MSC2666 endpoint behind an experimental flag (#19219) 2025-11-25 18:03:33 +00:00
test_notifications.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
test_owned_state.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_password_policy.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_power_levels.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_presence.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_profile.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
test_push_rule_attrs.py Configure Synapse to run MSC4306: Thread Subscriptions Complement tests. (#18819) 2025-09-09 11:40:10 +01:00
test_read_marker.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_receipts.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
test_redactions.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
test_register.py Use type hinting generics in standard collections (#19046) 2025-10-22 16:48:19 -05:00
test_relations.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
test_rendezvous.py Use type hinting generics in standard collections (#19046) 2025-10-22 16:48:19 -05:00
test_reporting.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
test_retention.py Use type hinting generics in standard collections (#19046) 2025-10-22 16:48:19 -05:00
test_rooms.py Return 400 when canonical_alias content invalid (#19240) 2025-12-01 15:24:26 +00:00
test_sendtodevice.py Remove obsolete and experimental /sync/e2ee endpoint. (#18583) 2025-09-09 09:28:45 +01:00
test_shadow_banned.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_sync.py Use type hinting generics in standard collections (#19046) 2025-10-22 16:48:19 -05:00
test_tags.py Don't allow tagnames longer than 255 bytes (#18660) 2025-07-18 14:23:28 +01:00
test_third_party_rules.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
test_thread_subscriptions.py Pydantic v2 (#19071) 2025-10-31 09:22:22 +00:00
test_transactions.py Port Clock functions to use Duration class (#19229) 2025-12-01 13:55:06 +00:00
test_typing.py Introduce Clock.call_when_running(...) to include logcontext by default (#18944) 2025-09-22 10:27:59 -05:00
test_upgrade_room.py Write union types as X | Y where possible (#19111) 2025-11-06 14:02:33 -06:00
utils.py Respond with useful error codes when Content-Length header/s are invalid (#19212) 2025-12-08 21:39:18 +00:00