Clients (at least the Rust SDK) use two separate Sliding Sync loops, one of them for room content and one for 'encryption'.
I'm noticing that both loops always seem to wake up at the same time, even though the encryption loop has no interesting data to return.
This seems unnecessarily chatty, particularly as it can happen dozens of time per second. We also appear to have logic intended to suppress wakeups for empty responses, but presumably this isn't succeeding here.
example logs in section below.
Empirically it feels like it wakes up A LOT when I'm sending typing notifications from another user (that's how I generated the log in the section below).
2025-09-03 11:22:17,167 - synapse.rest.client.sync - 1017 - INFO - POST-1034 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s42_101_17_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:17,337 - synapse.rest.client.sync - 1017 - INFO - POST-1043 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s42_101_18_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:17,425 - synapse.rest.client.sync - 1017 - INFO - POST-1043 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s43_101_18_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:17,702 - synapse.rest.client.sync - 1017 - INFO - POST-1048 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s43_101_19_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:18,403 - synapse.rest.client.sync - 1017 - INFO - POST-1052 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s43_101_20_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:18,486 - synapse.rest.client.sync - 1017 - INFO - POST-1060 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s44_101_20_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:18,511 - synapse.rest.client.sync - 1017 - INFO - POST-1068 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s44_101_21_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:18,938 - synapse.rest.client.sync - 1017 - INFO - POST-1068 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s44_101_22_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:19,018 - synapse.rest.client.sync - 1017 - INFO - POST-1072 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s45_101_22_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:19,062 - synapse.rest.client.sync - 1017 - INFO - POST-1079 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s45_101_23_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:19,480 - synapse.rest.client.sync - 1017 - INFO - POST-1079 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s45_101_24_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:19,550 - synapse.rest.client.sync - 1017 - INFO - POST-1083 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s46_101_24_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:19,589 - synapse.rest.client.sync - 1017 - INFO - POST-1092 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s46_101_25_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:19,871 - synapse.rest.client.sync - 1017 - INFO - POST-1092 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s46_101_26_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:19,954 - synapse.rest.client.sync - 1017 - INFO - PUT-1100 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s47_101_26_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:19,974 - synapse.rest.client.sync - 1017 - INFO - PUT-1106 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s47_101_27_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:20,254 - synapse.rest.client.sync - 1017 - INFO - PUT-1106 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s47_101_28_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:20,333 - synapse.rest.client.sync - 1017 - INFO - POST-1107 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s48_101_28_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:20,374 - synapse.rest.client.sync - 1017 - INFO - POST-1116 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s48_101_29_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
2025-09-03 11:22:20,653 - synapse.rest.client.sync - 1017 - INFO - POST-1116 - SSS=defaultdict(<class 'dict'>, {'pos': '0/s48_101_30_16_28_1_1_18_0_1', 'rooms': {}, 'extensions': {'to_device': {'next_batch': '1', 'events': []}, 'e2ee': {'device_one_time_keys_count': {'signed_curve25519': 100}, 'device_unused_fallback_key_types': ['signed_curve25519'], 'device_lists': {'changed': [], 'left': []}}}})
Description
Clients (at least the Rust SDK) use two separate Sliding Sync loops, one of them for room content and one for 'encryption'.
I'm noticing that both loops always seem to wake up at the same time, even though the encryption loop has no interesting data to return.
This seems unnecessarily chatty, particularly as it can happen dozens of time per second. We also appear to have logic intended to suppress wakeups for empty responses, but presumably this isn't succeeding here.
Steps to reproduce
postokenexample logs in section below.
Empirically it feels like it wakes up A LOT when I'm sending typing notifications from another user (that's how I generated the log in the section below).
patch for log line:
Homeserver
local testing homeserver
Synapse Version
1.138.0rc1 (b=develop,b2997a8f20,dirty) = b2997a8
Installation Method
Other (please mention below)
Database
SQLite
Workers
Single process
Platform
poetry dev install
Configuration
No response
Relevant log output
Anything else that would be useful to know?
No response