matrix-synapse 1.143.0__cp310-abi3-manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of matrix-synapse might be problematic. Click here for more details.

Files changed (1058) hide show
  1. matrix_synapse-1.143.0.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.143.0.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.143.0.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.143.0.dist-info/METADATA +385 -0
  5. matrix_synapse-1.143.0.dist-info/RECORD +1058 -0
  6. matrix_synapse-1.143.0.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.143.0.dist-info/entry_points.txt +14 -0
  8. synapse/__init__.py +97 -0
  9. synapse/_scripts/__init__.py +0 -0
  10. synapse/_scripts/export_signing_key.py +109 -0
  11. synapse/_scripts/generate_config.py +83 -0
  12. synapse/_scripts/generate_log_config.py +56 -0
  13. synapse/_scripts/generate_signing_key.py +55 -0
  14. synapse/_scripts/generate_workers_map.py +318 -0
  15. synapse/_scripts/hash_password.py +95 -0
  16. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  17. synapse/_scripts/register_new_matrix_user.py +402 -0
  18. synapse/_scripts/review_recent_signups.py +212 -0
  19. synapse/_scripts/synapse_port_db.py +1604 -0
  20. synapse/_scripts/synctl.py +365 -0
  21. synapse/_scripts/update_synapse_database.py +130 -0
  22. synapse/api/__init__.py +20 -0
  23. synapse/api/auth/__init__.py +207 -0
  24. synapse/api/auth/base.py +406 -0
  25. synapse/api/auth/internal.py +299 -0
  26. synapse/api/auth/mas.py +436 -0
  27. synapse/api/auth/msc3861_delegated.py +617 -0
  28. synapse/api/auth_blocking.py +144 -0
  29. synapse/api/constants.py +362 -0
  30. synapse/api/errors.py +907 -0
  31. synapse/api/filtering.py +537 -0
  32. synapse/api/presence.py +102 -0
  33. synapse/api/ratelimiting.py +480 -0
  34. synapse/api/room_versions.py +535 -0
  35. synapse/api/urls.py +118 -0
  36. synapse/app/__init__.py +60 -0
  37. synapse/app/_base.py +862 -0
  38. synapse/app/admin_cmd.py +388 -0
  39. synapse/app/appservice.py +30 -0
  40. synapse/app/client_reader.py +30 -0
  41. synapse/app/complement_fork_starter.py +206 -0
  42. synapse/app/event_creator.py +29 -0
  43. synapse/app/federation_reader.py +30 -0
  44. synapse/app/federation_sender.py +30 -0
  45. synapse/app/frontend_proxy.py +30 -0
  46. synapse/app/generic_worker.py +474 -0
  47. synapse/app/homeserver.py +505 -0
  48. synapse/app/media_repository.py +30 -0
  49. synapse/app/phone_stats_home.py +296 -0
  50. synapse/app/pusher.py +30 -0
  51. synapse/app/synchrotron.py +30 -0
  52. synapse/app/user_dir.py +31 -0
  53. synapse/appservice/__init__.py +458 -0
  54. synapse/appservice/api.py +567 -0
  55. synapse/appservice/scheduler.py +564 -0
  56. synapse/config/__init__.py +27 -0
  57. synapse/config/__main__.py +62 -0
  58. synapse/config/_base.py +1106 -0
  59. synapse/config/_base.pyi +215 -0
  60. synapse/config/_util.py +99 -0
  61. synapse/config/account_validity.py +116 -0
  62. synapse/config/api.py +141 -0
  63. synapse/config/appservice.py +210 -0
  64. synapse/config/auth.py +80 -0
  65. synapse/config/auto_accept_invites.py +43 -0
  66. synapse/config/background_updates.py +44 -0
  67. synapse/config/cache.py +231 -0
  68. synapse/config/captcha.py +90 -0
  69. synapse/config/cas.py +116 -0
  70. synapse/config/consent.py +73 -0
  71. synapse/config/database.py +184 -0
  72. synapse/config/emailconfig.py +367 -0
  73. synapse/config/experimental.py +595 -0
  74. synapse/config/federation.py +114 -0
  75. synapse/config/homeserver.py +141 -0
  76. synapse/config/jwt.py +55 -0
  77. synapse/config/key.py +447 -0
  78. synapse/config/logger.py +390 -0
  79. synapse/config/mas.py +192 -0
  80. synapse/config/matrixrtc.py +66 -0
  81. synapse/config/metrics.py +84 -0
  82. synapse/config/modules.py +40 -0
  83. synapse/config/oembed.py +185 -0
  84. synapse/config/oidc.py +509 -0
  85. synapse/config/password_auth_providers.py +82 -0
  86. synapse/config/push.py +64 -0
  87. synapse/config/ratelimiting.py +254 -0
  88. synapse/config/redis.py +74 -0
  89. synapse/config/registration.py +296 -0
  90. synapse/config/repository.py +311 -0
  91. synapse/config/retention.py +162 -0
  92. synapse/config/room.py +88 -0
  93. synapse/config/room_directory.py +165 -0
  94. synapse/config/saml2.py +251 -0
  95. synapse/config/server.py +1170 -0
  96. synapse/config/server_notices.py +84 -0
  97. synapse/config/spam_checker.py +66 -0
  98. synapse/config/sso.py +121 -0
  99. synapse/config/stats.py +54 -0
  100. synapse/config/third_party_event_rules.py +40 -0
  101. synapse/config/tls.py +192 -0
  102. synapse/config/tracer.py +71 -0
  103. synapse/config/user_directory.py +47 -0
  104. synapse/config/user_types.py +42 -0
  105. synapse/config/voip.py +59 -0
  106. synapse/config/workers.py +642 -0
  107. synapse/crypto/__init__.py +20 -0
  108. synapse/crypto/context_factory.py +278 -0
  109. synapse/crypto/event_signing.py +194 -0
  110. synapse/crypto/keyring.py +931 -0
  111. synapse/event_auth.py +1266 -0
  112. synapse/events/__init__.py +667 -0
  113. synapse/events/auto_accept_invites.py +216 -0
  114. synapse/events/builder.py +387 -0
  115. synapse/events/presence_router.py +243 -0
  116. synapse/events/snapshot.py +559 -0
  117. synapse/events/utils.py +924 -0
  118. synapse/events/validator.py +305 -0
  119. synapse/federation/__init__.py +22 -0
  120. synapse/federation/federation_base.py +382 -0
  121. synapse/federation/federation_client.py +2132 -0
  122. synapse/federation/federation_server.py +1540 -0
  123. synapse/federation/persistence.py +70 -0
  124. synapse/federation/send_queue.py +531 -0
  125. synapse/federation/sender/__init__.py +1164 -0
  126. synapse/federation/sender/per_destination_queue.py +886 -0
  127. synapse/federation/sender/transaction_manager.py +210 -0
  128. synapse/federation/transport/__init__.py +28 -0
  129. synapse/federation/transport/client.py +1199 -0
  130. synapse/federation/transport/server/__init__.py +334 -0
  131. synapse/federation/transport/server/_base.py +429 -0
  132. synapse/federation/transport/server/federation.py +910 -0
  133. synapse/federation/units.py +133 -0
  134. synapse/handlers/__init__.py +20 -0
  135. synapse/handlers/account.py +162 -0
  136. synapse/handlers/account_data.py +360 -0
  137. synapse/handlers/account_validity.py +361 -0
  138. synapse/handlers/admin.py +615 -0
  139. synapse/handlers/appservice.py +989 -0
  140. synapse/handlers/auth.py +2481 -0
  141. synapse/handlers/cas.py +413 -0
  142. synapse/handlers/deactivate_account.py +363 -0
  143. synapse/handlers/delayed_events.py +599 -0
  144. synapse/handlers/device.py +1870 -0
  145. synapse/handlers/devicemessage.py +399 -0
  146. synapse/handlers/directory.py +545 -0
  147. synapse/handlers/e2e_keys.py +1834 -0
  148. synapse/handlers/e2e_room_keys.py +455 -0
  149. synapse/handlers/event_auth.py +390 -0
  150. synapse/handlers/events.py +201 -0
  151. synapse/handlers/federation.py +2039 -0
  152. synapse/handlers/federation_event.py +2419 -0
  153. synapse/handlers/identity.py +812 -0
  154. synapse/handlers/initial_sync.py +528 -0
  155. synapse/handlers/jwt.py +120 -0
  156. synapse/handlers/message.py +2347 -0
  157. synapse/handlers/oidc.py +1801 -0
  158. synapse/handlers/pagination.py +768 -0
  159. synapse/handlers/password_policy.py +102 -0
  160. synapse/handlers/presence.py +2633 -0
  161. synapse/handlers/profile.py +655 -0
  162. synapse/handlers/push_rules.py +164 -0
  163. synapse/handlers/read_marker.py +79 -0
  164. synapse/handlers/receipts.py +351 -0
  165. synapse/handlers/register.py +1059 -0
  166. synapse/handlers/relations.py +623 -0
  167. synapse/handlers/reports.py +98 -0
  168. synapse/handlers/room.py +2448 -0
  169. synapse/handlers/room_list.py +632 -0
  170. synapse/handlers/room_member.py +2365 -0
  171. synapse/handlers/room_member_worker.py +146 -0
  172. synapse/handlers/room_policy.py +186 -0
  173. synapse/handlers/room_summary.py +1057 -0
  174. synapse/handlers/saml.py +524 -0
  175. synapse/handlers/search.py +723 -0
  176. synapse/handlers/send_email.py +209 -0
  177. synapse/handlers/set_password.py +71 -0
  178. synapse/handlers/sliding_sync/__init__.py +1701 -0
  179. synapse/handlers/sliding_sync/extensions.py +969 -0
  180. synapse/handlers/sliding_sync/room_lists.py +2262 -0
  181. synapse/handlers/sliding_sync/store.py +128 -0
  182. synapse/handlers/sso.py +1291 -0
  183. synapse/handlers/state_deltas.py +82 -0
  184. synapse/handlers/stats.py +321 -0
  185. synapse/handlers/sync.py +3106 -0
  186. synapse/handlers/thread_subscriptions.py +190 -0
  187. synapse/handlers/typing.py +606 -0
  188. synapse/handlers/ui_auth/__init__.py +48 -0
  189. synapse/handlers/ui_auth/checkers.py +332 -0
  190. synapse/handlers/user_directory.py +783 -0
  191. synapse/handlers/worker_lock.py +371 -0
  192. synapse/http/__init__.py +105 -0
  193. synapse/http/additional_resource.py +62 -0
  194. synapse/http/client.py +1373 -0
  195. synapse/http/connectproxyclient.py +316 -0
  196. synapse/http/federation/__init__.py +19 -0
  197. synapse/http/federation/matrix_federation_agent.py +490 -0
  198. synapse/http/federation/srv_resolver.py +196 -0
  199. synapse/http/federation/well_known_resolver.py +367 -0
  200. synapse/http/matrixfederationclient.py +1873 -0
  201. synapse/http/proxy.py +290 -0
  202. synapse/http/proxyagent.py +497 -0
  203. synapse/http/replicationagent.py +202 -0
  204. synapse/http/request_metrics.py +309 -0
  205. synapse/http/server.py +1110 -0
  206. synapse/http/servlet.py +1018 -0
  207. synapse/http/site.py +825 -0
  208. synapse/http/types.py +27 -0
  209. synapse/logging/__init__.py +31 -0
  210. synapse/logging/_remote.py +261 -0
  211. synapse/logging/_terse_json.py +95 -0
  212. synapse/logging/context.py +1209 -0
  213. synapse/logging/formatter.py +62 -0
  214. synapse/logging/handlers.py +99 -0
  215. synapse/logging/loggers.py +25 -0
  216. synapse/logging/opentracing.py +1132 -0
  217. synapse/logging/scopecontextmanager.py +160 -0
  218. synapse/media/_base.py +830 -0
  219. synapse/media/filepath.py +417 -0
  220. synapse/media/media_repository.py +1580 -0
  221. synapse/media/media_storage.py +702 -0
  222. synapse/media/oembed.py +277 -0
  223. synapse/media/preview_html.py +556 -0
  224. synapse/media/storage_provider.py +195 -0
  225. synapse/media/thumbnailer.py +833 -0
  226. synapse/media/url_previewer.py +875 -0
  227. synapse/metrics/__init__.py +748 -0
  228. synapse/metrics/_gc.py +219 -0
  229. synapse/metrics/_reactor_metrics.py +171 -0
  230. synapse/metrics/_types.py +38 -0
  231. synapse/metrics/background_process_metrics.py +555 -0
  232. synapse/metrics/common_usage_metrics.py +94 -0
  233. synapse/metrics/jemalloc.py +248 -0
  234. synapse/module_api/__init__.py +2131 -0
  235. synapse/module_api/callbacks/__init__.py +50 -0
  236. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  237. synapse/module_api/callbacks/media_repository_callbacks.py +157 -0
  238. synapse/module_api/callbacks/ratelimit_callbacks.py +78 -0
  239. synapse/module_api/callbacks/spamchecker_callbacks.py +991 -0
  240. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +592 -0
  241. synapse/module_api/errors.py +42 -0
  242. synapse/notifier.py +970 -0
  243. synapse/push/__init__.py +212 -0
  244. synapse/push/bulk_push_rule_evaluator.py +635 -0
  245. synapse/push/clientformat.py +126 -0
  246. synapse/push/emailpusher.py +333 -0
  247. synapse/push/httppusher.py +564 -0
  248. synapse/push/mailer.py +1010 -0
  249. synapse/push/presentable_names.py +216 -0
  250. synapse/push/push_tools.py +114 -0
  251. synapse/push/push_types.py +141 -0
  252. synapse/push/pusher.py +87 -0
  253. synapse/push/pusherpool.py +501 -0
  254. synapse/push/rulekinds.py +33 -0
  255. synapse/py.typed +0 -0
  256. synapse/replication/__init__.py +20 -0
  257. synapse/replication/http/__init__.py +68 -0
  258. synapse/replication/http/_base.py +468 -0
  259. synapse/replication/http/account_data.py +297 -0
  260. synapse/replication/http/deactivate_account.py +81 -0
  261. synapse/replication/http/delayed_events.py +62 -0
  262. synapse/replication/http/devices.py +254 -0
  263. synapse/replication/http/federation.py +334 -0
  264. synapse/replication/http/login.py +106 -0
  265. synapse/replication/http/membership.py +364 -0
  266. synapse/replication/http/presence.py +133 -0
  267. synapse/replication/http/push.py +156 -0
  268. synapse/replication/http/register.py +172 -0
  269. synapse/replication/http/send_events.py +182 -0
  270. synapse/replication/http/state.py +82 -0
  271. synapse/replication/http/streams.py +101 -0
  272. synapse/replication/tcp/__init__.py +56 -0
  273. synapse/replication/tcp/client.py +552 -0
  274. synapse/replication/tcp/commands.py +569 -0
  275. synapse/replication/tcp/context.py +41 -0
  276. synapse/replication/tcp/external_cache.py +156 -0
  277. synapse/replication/tcp/handler.py +922 -0
  278. synapse/replication/tcp/protocol.py +608 -0
  279. synapse/replication/tcp/redis.py +509 -0
  280. synapse/replication/tcp/resource.py +348 -0
  281. synapse/replication/tcp/streams/__init__.py +96 -0
  282. synapse/replication/tcp/streams/_base.py +765 -0
  283. synapse/replication/tcp/streams/events.py +287 -0
  284. synapse/replication/tcp/streams/federation.py +92 -0
  285. synapse/replication/tcp/streams/partial_state.py +80 -0
  286. synapse/res/providers.json +29 -0
  287. synapse/res/templates/_base.html +29 -0
  288. synapse/res/templates/account_previously_renewed.html +6 -0
  289. synapse/res/templates/account_renewed.html +6 -0
  290. synapse/res/templates/add_threepid.html +8 -0
  291. synapse/res/templates/add_threepid.txt +6 -0
  292. synapse/res/templates/add_threepid_failure.html +7 -0
  293. synapse/res/templates/add_threepid_success.html +6 -0
  294. synapse/res/templates/already_in_use.html +12 -0
  295. synapse/res/templates/already_in_use.txt +10 -0
  296. synapse/res/templates/auth_success.html +21 -0
  297. synapse/res/templates/invalid_token.html +6 -0
  298. synapse/res/templates/mail-Element.css +7 -0
  299. synapse/res/templates/mail-Vector.css +7 -0
  300. synapse/res/templates/mail-expiry.css +4 -0
  301. synapse/res/templates/mail.css +156 -0
  302. synapse/res/templates/notice_expiry.html +46 -0
  303. synapse/res/templates/notice_expiry.txt +7 -0
  304. synapse/res/templates/notif.html +51 -0
  305. synapse/res/templates/notif.txt +22 -0
  306. synapse/res/templates/notif_mail.html +59 -0
  307. synapse/res/templates/notif_mail.txt +10 -0
  308. synapse/res/templates/password_reset.html +10 -0
  309. synapse/res/templates/password_reset.txt +7 -0
  310. synapse/res/templates/password_reset_confirmation.html +15 -0
  311. synapse/res/templates/password_reset_failure.html +7 -0
  312. synapse/res/templates/password_reset_success.html +6 -0
  313. synapse/res/templates/recaptcha.html +42 -0
  314. synapse/res/templates/registration.html +12 -0
  315. synapse/res/templates/registration.txt +10 -0
  316. synapse/res/templates/registration_failure.html +6 -0
  317. synapse/res/templates/registration_success.html +6 -0
  318. synapse/res/templates/registration_token.html +18 -0
  319. synapse/res/templates/room.html +33 -0
  320. synapse/res/templates/room.txt +9 -0
  321. synapse/res/templates/sso.css +129 -0
  322. synapse/res/templates/sso_account_deactivated.html +25 -0
  323. synapse/res/templates/sso_auth_account_details.html +186 -0
  324. synapse/res/templates/sso_auth_account_details.js +116 -0
  325. synapse/res/templates/sso_auth_bad_user.html +26 -0
  326. synapse/res/templates/sso_auth_confirm.html +27 -0
  327. synapse/res/templates/sso_auth_success.html +26 -0
  328. synapse/res/templates/sso_error.html +71 -0
  329. synapse/res/templates/sso_footer.html +19 -0
  330. synapse/res/templates/sso_login_idp_picker.html +60 -0
  331. synapse/res/templates/sso_new_user_consent.html +30 -0
  332. synapse/res/templates/sso_partial_profile.html +19 -0
  333. synapse/res/templates/sso_redirect_confirm.html +39 -0
  334. synapse/res/templates/style.css +33 -0
  335. synapse/res/templates/terms.html +27 -0
  336. synapse/rest/__init__.py +197 -0
  337. synapse/rest/admin/__init__.py +390 -0
  338. synapse/rest/admin/_base.py +72 -0
  339. synapse/rest/admin/background_updates.py +171 -0
  340. synapse/rest/admin/devices.py +221 -0
  341. synapse/rest/admin/event_reports.py +173 -0
  342. synapse/rest/admin/events.py +69 -0
  343. synapse/rest/admin/experimental_features.py +137 -0
  344. synapse/rest/admin/federation.py +243 -0
  345. synapse/rest/admin/media.py +540 -0
  346. synapse/rest/admin/registration_tokens.py +358 -0
  347. synapse/rest/admin/rooms.py +1061 -0
  348. synapse/rest/admin/scheduled_tasks.py +70 -0
  349. synapse/rest/admin/server_notice_servlet.py +132 -0
  350. synapse/rest/admin/statistics.py +132 -0
  351. synapse/rest/admin/username_available.py +58 -0
  352. synapse/rest/admin/users.py +1606 -0
  353. synapse/rest/client/__init__.py +20 -0
  354. synapse/rest/client/_base.py +113 -0
  355. synapse/rest/client/account.py +930 -0
  356. synapse/rest/client/account_data.py +319 -0
  357. synapse/rest/client/account_validity.py +103 -0
  358. synapse/rest/client/appservice_ping.py +125 -0
  359. synapse/rest/client/auth.py +218 -0
  360. synapse/rest/client/auth_metadata.py +122 -0
  361. synapse/rest/client/capabilities.py +121 -0
  362. synapse/rest/client/delayed_events.py +165 -0
  363. synapse/rest/client/devices.py +587 -0
  364. synapse/rest/client/directory.py +211 -0
  365. synapse/rest/client/events.py +116 -0
  366. synapse/rest/client/filter.py +112 -0
  367. synapse/rest/client/initial_sync.py +65 -0
  368. synapse/rest/client/keys.py +678 -0
  369. synapse/rest/client/knock.py +104 -0
  370. synapse/rest/client/login.py +750 -0
  371. synapse/rest/client/login_token_request.py +127 -0
  372. synapse/rest/client/logout.py +93 -0
  373. synapse/rest/client/matrixrtc.py +52 -0
  374. synapse/rest/client/media.py +285 -0
  375. synapse/rest/client/mutual_rooms.py +93 -0
  376. synapse/rest/client/notifications.py +137 -0
  377. synapse/rest/client/openid.py +109 -0
  378. synapse/rest/client/password_policy.py +69 -0
  379. synapse/rest/client/presence.py +131 -0
  380. synapse/rest/client/profile.py +291 -0
  381. synapse/rest/client/push_rule.py +331 -0
  382. synapse/rest/client/pusher.py +181 -0
  383. synapse/rest/client/read_marker.py +104 -0
  384. synapse/rest/client/receipts.py +165 -0
  385. synapse/rest/client/register.py +1067 -0
  386. synapse/rest/client/relations.py +138 -0
  387. synapse/rest/client/rendezvous.py +76 -0
  388. synapse/rest/client/reporting.py +207 -0
  389. synapse/rest/client/room.py +1669 -0
  390. synapse/rest/client/room_keys.py +426 -0
  391. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  392. synapse/rest/client/sendtodevice.py +85 -0
  393. synapse/rest/client/sync.py +1131 -0
  394. synapse/rest/client/tags.py +129 -0
  395. synapse/rest/client/thirdparty.py +130 -0
  396. synapse/rest/client/thread_subscriptions.py +247 -0
  397. synapse/rest/client/tokenrefresh.py +52 -0
  398. synapse/rest/client/transactions.py +149 -0
  399. synapse/rest/client/user_directory.py +90 -0
  400. synapse/rest/client/versions.py +191 -0
  401. synapse/rest/client/voip.py +88 -0
  402. synapse/rest/consent/__init__.py +0 -0
  403. synapse/rest/consent/consent_resource.py +210 -0
  404. synapse/rest/health.py +38 -0
  405. synapse/rest/key/__init__.py +20 -0
  406. synapse/rest/key/v2/__init__.py +40 -0
  407. synapse/rest/key/v2/local_key_resource.py +125 -0
  408. synapse/rest/key/v2/remote_key_resource.py +302 -0
  409. synapse/rest/media/__init__.py +0 -0
  410. synapse/rest/media/config_resource.py +53 -0
  411. synapse/rest/media/create_resource.py +90 -0
  412. synapse/rest/media/download_resource.py +110 -0
  413. synapse/rest/media/media_repository_resource.py +113 -0
  414. synapse/rest/media/preview_url_resource.py +77 -0
  415. synapse/rest/media/thumbnail_resource.py +142 -0
  416. synapse/rest/media/upload_resource.py +187 -0
  417. synapse/rest/media/v1/__init__.py +39 -0
  418. synapse/rest/media/v1/_base.py +23 -0
  419. synapse/rest/media/v1/media_storage.py +23 -0
  420. synapse/rest/media/v1/storage_provider.py +23 -0
  421. synapse/rest/synapse/__init__.py +20 -0
  422. synapse/rest/synapse/client/__init__.py +93 -0
  423. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  424. synapse/rest/synapse/client/jwks.py +77 -0
  425. synapse/rest/synapse/client/new_user_consent.py +115 -0
  426. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  427. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  428. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  429. synapse/rest/synapse/client/password_reset.py +129 -0
  430. synapse/rest/synapse/client/pick_idp.py +107 -0
  431. synapse/rest/synapse/client/pick_username.py +153 -0
  432. synapse/rest/synapse/client/rendezvous.py +58 -0
  433. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  434. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  435. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  436. synapse/rest/synapse/client/sso_register.py +56 -0
  437. synapse/rest/synapse/client/unsubscribe.py +88 -0
  438. synapse/rest/synapse/mas/__init__.py +71 -0
  439. synapse/rest/synapse/mas/_base.py +55 -0
  440. synapse/rest/synapse/mas/devices.py +239 -0
  441. synapse/rest/synapse/mas/users.py +469 -0
  442. synapse/rest/well_known.py +148 -0
  443. synapse/server.py +1257 -0
  444. synapse/server_notices/__init__.py +0 -0
  445. synapse/server_notices/consent_server_notices.py +136 -0
  446. synapse/server_notices/resource_limits_server_notices.py +215 -0
  447. synapse/server_notices/server_notices_manager.py +388 -0
  448. synapse/server_notices/server_notices_sender.py +67 -0
  449. synapse/server_notices/worker_server_notices_sender.py +46 -0
  450. synapse/spam_checker_api/__init__.py +31 -0
  451. synapse/state/__init__.py +1022 -0
  452. synapse/state/v1.py +369 -0
  453. synapse/state/v2.py +984 -0
  454. synapse/static/client/login/index.html +47 -0
  455. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  456. synapse/static/client/login/js/login.js +291 -0
  457. synapse/static/client/login/spinner.gif +0 -0
  458. synapse/static/client/login/style.css +79 -0
  459. synapse/static/index.html +63 -0
  460. synapse/storage/__init__.py +43 -0
  461. synapse/storage/_base.py +245 -0
  462. synapse/storage/admin_client_config.py +25 -0
  463. synapse/storage/background_updates.py +1188 -0
  464. synapse/storage/controllers/__init__.py +57 -0
  465. synapse/storage/controllers/persist_events.py +1237 -0
  466. synapse/storage/controllers/purge_events.py +455 -0
  467. synapse/storage/controllers/state.py +950 -0
  468. synapse/storage/controllers/stats.py +119 -0
  469. synapse/storage/database.py +2719 -0
  470. synapse/storage/databases/__init__.py +175 -0
  471. synapse/storage/databases/main/__init__.py +420 -0
  472. synapse/storage/databases/main/account_data.py +1059 -0
  473. synapse/storage/databases/main/appservice.py +473 -0
  474. synapse/storage/databases/main/cache.py +911 -0
  475. synapse/storage/databases/main/censor_events.py +225 -0
  476. synapse/storage/databases/main/client_ips.py +815 -0
  477. synapse/storage/databases/main/delayed_events.py +562 -0
  478. synapse/storage/databases/main/deviceinbox.py +1271 -0
  479. synapse/storage/databases/main/devices.py +2578 -0
  480. synapse/storage/databases/main/directory.py +212 -0
  481. synapse/storage/databases/main/e2e_room_keys.py +689 -0
  482. synapse/storage/databases/main/end_to_end_keys.py +1894 -0
  483. synapse/storage/databases/main/event_federation.py +2508 -0
  484. synapse/storage/databases/main/event_push_actions.py +1933 -0
  485. synapse/storage/databases/main/events.py +3765 -0
  486. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  487. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  488. synapse/storage/databases/main/events_worker.py +2786 -0
  489. synapse/storage/databases/main/experimental_features.py +130 -0
  490. synapse/storage/databases/main/filtering.py +231 -0
  491. synapse/storage/databases/main/keys.py +291 -0
  492. synapse/storage/databases/main/lock.py +553 -0
  493. synapse/storage/databases/main/media_repository.py +1068 -0
  494. synapse/storage/databases/main/metrics.py +460 -0
  495. synapse/storage/databases/main/monthly_active_users.py +443 -0
  496. synapse/storage/databases/main/openid.py +60 -0
  497. synapse/storage/databases/main/presence.py +509 -0
  498. synapse/storage/databases/main/profile.py +539 -0
  499. synapse/storage/databases/main/purge_events.py +521 -0
  500. synapse/storage/databases/main/push_rule.py +970 -0
  501. synapse/storage/databases/main/pusher.py +793 -0
  502. synapse/storage/databases/main/receipts.py +1341 -0
  503. synapse/storage/databases/main/registration.py +3072 -0
  504. synapse/storage/databases/main/rejections.py +37 -0
  505. synapse/storage/databases/main/relations.py +1116 -0
  506. synapse/storage/databases/main/room.py +2779 -0
  507. synapse/storage/databases/main/roommember.py +2110 -0
  508. synapse/storage/databases/main/search.py +939 -0
  509. synapse/storage/databases/main/session.py +151 -0
  510. synapse/storage/databases/main/signatures.py +94 -0
  511. synapse/storage/databases/main/sliding_sync.py +603 -0
  512. synapse/storage/databases/main/state.py +1002 -0
  513. synapse/storage/databases/main/state_deltas.py +329 -0
  514. synapse/storage/databases/main/stats.py +789 -0
  515. synapse/storage/databases/main/stream.py +2577 -0
  516. synapse/storage/databases/main/tags.py +360 -0
  517. synapse/storage/databases/main/task_scheduler.py +225 -0
  518. synapse/storage/databases/main/thread_subscriptions.py +589 -0
  519. synapse/storage/databases/main/transactions.py +675 -0
  520. synapse/storage/databases/main/ui_auth.py +420 -0
  521. synapse/storage/databases/main/user_directory.py +1330 -0
  522. synapse/storage/databases/main/user_erasure_store.py +117 -0
  523. synapse/storage/databases/state/__init__.py +22 -0
  524. synapse/storage/databases/state/bg_updates.py +497 -0
  525. synapse/storage/databases/state/deletion.py +557 -0
  526. synapse/storage/databases/state/store.py +948 -0
  527. synapse/storage/engines/__init__.py +70 -0
  528. synapse/storage/engines/_base.py +154 -0
  529. synapse/storage/engines/postgres.py +261 -0
  530. synapse/storage/engines/sqlite.py +199 -0
  531. synapse/storage/invite_rule.py +112 -0
  532. synapse/storage/keys.py +40 -0
  533. synapse/storage/prepare_database.py +730 -0
  534. synapse/storage/push_rule.py +28 -0
  535. synapse/storage/roommember.py +88 -0
  536. synapse/storage/schema/README.md +4 -0
  537. synapse/storage/schema/__init__.py +186 -0
  538. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  539. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  540. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  541. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  543. synapse/storage/schema/common/schema_version.sql +60 -0
  544. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  545. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  546. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  547. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  548. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  549. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  550. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  551. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  552. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  553. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  554. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  555. synapse/storage/schema/main/delta/16/users.sql +56 -0
  556. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  557. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  558. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  559. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  560. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  561. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  562. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  563. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  564. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  565. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  566. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  567. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  568. synapse/storage/schema/main/delta/25/fts.py +81 -0
  569. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  570. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  571. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  572. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  573. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  574. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  575. synapse/storage/schema/main/delta/27/ts.py +61 -0
  576. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  577. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  578. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  579. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  580. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  581. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  582. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  583. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  584. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  585. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  586. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  587. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  588. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  589. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  590. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  591. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  592. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  593. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  594. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  595. synapse/storage/schema/main/delta/32/events.sql +35 -0
  596. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  597. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  598. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  599. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  600. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  601. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  602. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  604. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  605. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  606. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  607. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  608. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  609. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  610. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  611. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  612. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  613. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  614. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  615. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  616. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  617. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  618. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  619. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  620. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  621. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  622. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  623. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  624. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  625. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  626. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  627. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  628. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  629. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  630. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  631. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  632. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  633. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  634. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  635. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  636. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  637. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  638. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  639. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  640. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  641. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  642. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  643. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  644. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  645. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  646. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  647. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  648. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  649. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  650. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  651. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  652. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  653. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  654. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  655. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  656. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  657. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  658. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  659. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  660. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  661. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  662. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  663. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  664. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  665. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  666. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  667. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  668. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  669. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  670. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  671. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  672. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  673. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  674. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  675. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  676. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  678. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  679. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  680. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  681. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  682. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  683. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  684. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  685. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  686. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  687. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  688. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  689. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  690. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  691. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  692. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  694. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  695. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  697. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  698. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  699. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  700. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  701. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  702. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  703. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  704. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  706. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  707. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  708. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  712. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  713. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  714. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  715. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  716. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  717. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  718. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  719. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  720. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  721. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  722. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  723. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  724. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  725. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  726. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  731. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  732. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  733. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  734. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  735. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  737. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  738. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  740. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  741. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  742. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  743. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  744. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  745. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  746. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  747. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  748. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  749. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  751. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  752. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  753. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  754. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  755. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  756. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  757. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  758. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  759. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  760. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  761. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  762. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  763. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  764. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  765. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  766. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  767. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  768. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  769. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  771. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  772. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  773. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  774. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  776. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  777. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  778. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  781. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  782. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  783. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  784. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  785. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  786. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  787. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  788. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  789. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  791. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  792. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  793. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  794. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  795. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  796. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  797. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  798. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  799. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  800. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  801. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  802. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  803. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  804. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  805. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  806. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  807. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  809. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  810. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  811. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  812. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  813. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  814. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  815. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  816. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  817. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  818. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  819. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  820. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  821. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  822. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  823. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  824. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  825. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  826. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  827. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  828. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  829. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  830. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  831. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  833. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  834. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  835. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  836. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  837. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  838. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  839. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  840. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  841. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  843. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  844. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  845. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  846. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  847. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  848. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  850. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  851. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  852. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  853. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  854. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  855. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  856. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  857. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  858. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  859. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  860. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  862. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  863. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  865. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  866. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  867. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  868. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  869. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  870. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  871. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  872. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  873. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  874. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  875. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  876. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  877. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  878. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  879. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  880. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  881. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  882. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  884. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  885. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  886. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  887. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  888. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  889. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  890. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  892. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  893. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  894. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  896. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  897. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  898. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  902. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  903. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  904. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  905. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  906. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  907. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  908. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  910. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  911. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  913. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  914. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  915. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  916. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  917. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  918. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  919. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  920. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  921. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  922. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  923. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  924. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  925. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  926. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  927. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  928. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  929. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  930. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  931. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  932. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  933. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  934. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  935. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  936. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  937. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  938. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  939. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  940. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  941. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  942. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  943. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  944. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  947. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  948. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  949. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  950. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  951. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  952. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  954. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  955. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  956. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  958. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  959. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  960. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  961. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  962. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  963. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  964. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  965. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  966. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  968. synapse/storage/schema/main/delta/93/01_add_delayed_events.sql +15 -0
  969. synapse/storage/schema/main/full_schemas/72/full.sql.postgres +1344 -0
  970. synapse/storage/schema/main/full_schemas/72/full.sql.sqlite +646 -0
  971. synapse/storage/schema/state/delta/23/drop_state_index.sql +35 -0
  972. synapse/storage/schema/state/delta/32/remove_state_indices.sql +38 -0
  973. synapse/storage/schema/state/delta/35/add_state_index.sql +36 -0
  974. synapse/storage/schema/state/delta/35/state.sql +41 -0
  975. synapse/storage/schema/state/delta/35/state_dedupe.sql +36 -0
  976. synapse/storage/schema/state/delta/47/state_group_seq.py +38 -0
  977. synapse/storage/schema/state/delta/56/state_group_room_idx.sql +36 -0
  978. synapse/storage/schema/state/delta/61/02state_groups_state_n_distinct.sql.postgres +34 -0
  979. synapse/storage/schema/state/delta/70/08_state_group_edges_unique.sql +36 -0
  980. synapse/storage/schema/state/delta/89/01_state_groups_deletion.sql +39 -0
  981. synapse/storage/schema/state/delta/90/02_delete_unreferenced_state_groups.sql +16 -0
  982. synapse/storage/schema/state/delta/90/03_remove_old_deletion_bg_update.sql +15 -0
  983. synapse/storage/schema/state/full_schemas/72/full.sql.postgres +30 -0
  984. synapse/storage/schema/state/full_schemas/72/full.sql.sqlite +20 -0
  985. synapse/storage/types.py +183 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +928 -0
  988. synapse/storage/util/partial_state_events_tracker.py +194 -0
  989. synapse/storage/util/sequence.py +315 -0
  990. synapse/streams/__init__.py +43 -0
  991. synapse/streams/config.py +91 -0
  992. synapse/streams/events.py +203 -0
  993. synapse/synapse_rust/__init__.pyi +3 -0
  994. synapse/synapse_rust/acl.pyi +20 -0
  995. synapse/synapse_rust/events.pyi +136 -0
  996. synapse/synapse_rust/http_client.pyi +32 -0
  997. synapse/synapse_rust/push.pyi +86 -0
  998. synapse/synapse_rust/rendezvous.pyi +30 -0
  999. synapse/synapse_rust/segmenter.pyi +1 -0
  1000. synapse/synapse_rust.abi3.so +0 -0
  1001. synapse/types/__init__.py +1600 -0
  1002. synapse/types/handlers/__init__.py +93 -0
  1003. synapse/types/handlers/policy_server.py +16 -0
  1004. synapse/types/handlers/sliding_sync.py +908 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +413 -0
  1007. synapse/types/state.py +634 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +169 -0
  1010. synapse/util/async_helpers.py +1045 -0
  1011. synapse/util/background_queue.py +142 -0
  1012. synapse/util/batching_queue.py +202 -0
  1013. synapse/util/caches/__init__.py +300 -0
  1014. synapse/util/caches/cached_call.py +143 -0
  1015. synapse/util/caches/deferred_cache.py +530 -0
  1016. synapse/util/caches/descriptors.py +692 -0
  1017. synapse/util/caches/dictionary_cache.py +346 -0
  1018. synapse/util/caches/expiringcache.py +249 -0
  1019. synapse/util/caches/lrucache.py +975 -0
  1020. synapse/util/caches/response_cache.py +322 -0
  1021. synapse/util/caches/stream_change_cache.py +370 -0
  1022. synapse/util/caches/treecache.py +189 -0
  1023. synapse/util/caches/ttlcache.py +197 -0
  1024. synapse/util/cancellation.py +63 -0
  1025. synapse/util/check_dependencies.py +335 -0
  1026. synapse/util/clock.py +567 -0
  1027. synapse/util/constants.py +22 -0
  1028. synapse/util/daemonize.py +165 -0
  1029. synapse/util/distributor.py +157 -0
  1030. synapse/util/events.py +134 -0
  1031. synapse/util/file_consumer.py +164 -0
  1032. synapse/util/frozenutils.py +57 -0
  1033. synapse/util/gai_resolver.py +178 -0
  1034. synapse/util/hash.py +38 -0
  1035. synapse/util/httpresourcetree.py +108 -0
  1036. synapse/util/iterutils.py +189 -0
  1037. synapse/util/json.py +56 -0
  1038. synapse/util/linked_list.py +156 -0
  1039. synapse/util/logcontext.py +46 -0
  1040. synapse/util/logformatter.py +28 -0
  1041. synapse/util/macaroons.py +325 -0
  1042. synapse/util/manhole.py +191 -0
  1043. synapse/util/metrics.py +339 -0
  1044. synapse/util/module_loader.py +116 -0
  1045. synapse/util/msisdn.py +51 -0
  1046. synapse/util/patch_inline_callbacks.py +250 -0
  1047. synapse/util/pydantic_models.py +63 -0
  1048. synapse/util/ratelimitutils.py +419 -0
  1049. synapse/util/retryutils.py +339 -0
  1050. synapse/util/rlimit.py +42 -0
  1051. synapse/util/rust.py +133 -0
  1052. synapse/util/sentinel.py +21 -0
  1053. synapse/util/stringutils.py +293 -0
  1054. synapse/util/task_scheduler.py +493 -0
  1055. synapse/util/templates.py +126 -0
  1056. synapse/util/threepids.py +123 -0
  1057. synapse/util/wheel_timer.py +112 -0
  1058. synapse/visibility.py +835 -0
@@ -0,0 +1,1164 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright (C) 2023 New Vector, Ltd
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as
8
+ # published by the Free Software Foundation, either version 3 of the
9
+ # License, or (at your option) any later version.
10
+ #
11
+ # See the GNU Affero General Public License for more details:
12
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
13
+ #
14
+ # Originally licensed under the Apache License, Version 2.0:
15
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
16
+ #
17
+ # [This file includes modifications made by New Vector Limited]
18
+ #
19
+ #
20
+ """
21
+ The Federation Sender is responsible for sending Persistent Data Units (PDUs)
22
+ and Ephemeral Data Units (EDUs) to other homeservers using
23
+ the `/send` Federation API.
24
+
25
+
26
+ ## How do PDUs get sent?
27
+
28
+ The Federation Sender is made aware of new PDUs due to `FederationSender.notify_new_events`.
29
+ When the sender is notified about a newly-persisted PDU that originates from this homeserver
30
+ and is not an out-of-band event, we pass the PDU to the `_PerDestinationQueue` for each
31
+ remote homeserver that is in the room at that point in the DAG.
32
+
33
+
34
+ ### Per-Destination Queues
35
+
36
+ There is one `PerDestinationQueue` per 'destination' homeserver.
37
+ The `PerDestinationQueue` maintains the following information about the destination:
38
+
39
+ - whether the destination is currently in [catch-up mode (see below)](#catch-up-mode);
40
+ - a queue of PDUs to be sent to the destination; and
41
+ - a queue of EDUs to be sent to the destination (not considered in this section).
42
+
43
+ Upon a new PDU being enqueued, `attempt_new_transaction` is called to start a new
44
+ transaction if there is not already one in progress.
45
+
46
+
47
+ ### Transactions and the Transaction Transmission Loop
48
+
49
+ Each federation HTTP request to the `/send` endpoint is referred to as a 'transaction'.
50
+ The body of the HTTP request contains a list of PDUs and EDUs to send to the destination.
51
+
52
+ The *Transaction Transmission Loop* (`_transaction_transmission_loop`) is responsible
53
+ for emptying the queued PDUs (and EDUs) from a `PerDestinationQueue` by sending
54
+ them to the destination.
55
+
56
+ There can only be one transaction in flight for a given destination at any time.
57
+ (Other than preventing us from overloading the destination, this also makes it easier to
58
+ reason about because we process events sequentially for each destination.
59
+ This is useful for *Catch-Up Mode*, described later.)
60
+
61
+ The loop continues so long as there is anything to send. At each iteration of the loop, we:
62
+
63
+ - dequeue up to 50 PDUs (and up to 100 EDUs).
64
+ - make the `/send` request to the destination homeserver with the dequeued PDUs and EDUs.
65
+ - if successful, make note of the fact that we succeeded in transmitting PDUs up to
66
+ the given `stream_ordering` of the latest PDU by
67
+ - if unsuccessful, back off from the remote homeserver for some time.
68
+ If we have been unsuccessful for too long (when the backoff interval grows to exceed 1 hour),
69
+ the in-memory queues are emptied and we enter [*Catch-Up Mode*, described below](#catch-up-mode).
70
+
71
+
72
+ ### Catch-Up Mode
73
+
74
+ When the `PerDestinationQueue` has the catch-up flag set, the *Catch-Up Transmission Loop*
75
+ (`_catch_up_transmission_loop`) is used in lieu of the regular `_transaction_transmission_loop`.
76
+ (Only once the catch-up mode has been exited can the regular transaction transmission behaviour
77
+ be resumed.)
78
+
79
+ *Catch-Up Mode*, entered upon Synapse startup or once a homeserver has fallen behind due to
80
+ connection problems, is responsible for sending PDUs that have been missed by the destination
81
+ homeserver. (PDUs can be missed because the `PerDestinationQueue` is volatile — i.e. resets
82
+ on startup — and it does not hold PDUs forever if `/send` requests to the destination fail.)
83
+
84
+ The catch-up mechanism makes use of the `last_successful_stream_ordering` column in the
85
+ `destinations` table (which gives the `stream_ordering` of the most recent successfully
86
+ sent PDU) and the `stream_ordering` column in the `destination_rooms` table (which gives,
87
+ for each room, the `stream_ordering` of the most recent PDU that needs to be sent to this
88
+ destination).
89
+
90
+ Each iteration of the loop pulls out 50 `destination_rooms` entries with the oldest
91
+ `stream_ordering`s that are greater than the `last_successful_stream_ordering`.
92
+ In other words, from the set of latest PDUs in each room to be sent to the destination,
93
+ the 50 oldest such PDUs are pulled out.
94
+
95
+ These PDUs could, in principle, now be directly sent to the destination. However, as an
96
+ optimisation intended to prevent overloading destination homeservers, we instead attempt
97
+ to send the latest forward extremities so long as the destination homeserver is still
98
+ eligible to receive those.
99
+ This reduces load on the destination **in aggregate** because all Synapse homeservers
100
+ will behave according to this principle and therefore avoid sending lots of different PDUs
101
+ at different points in the DAG to a recovering homeserver.
102
+ *This optimisation is not currently valid in rooms which are partial-state on this homeserver,
103
+ since we are unable to determine whether the destination homeserver is eligible to receive
104
+ the latest forward extremities unless this homeserver sent those PDUs — in this case, we
105
+ just send the latest PDUs originating from this server and skip this optimisation.*
106
+
107
+ Whilst PDUs are sent through this mechanism, the position of `last_successful_stream_ordering`
108
+ is advanced as normal.
109
+ Once there are no longer any rooms containing outstanding PDUs to be sent to the destination
110
+ *that are not already in the `PerDestinationQueue` because they arrived since Catch-Up Mode
111
+ was enabled*, Catch-Up Mode is exited and we return to `_transaction_transmission_loop`.
112
+
113
+
114
+ #### A note on failures and back-offs
115
+
116
+ If a remote server is unreachable over federation, we back off from that server,
117
+ with an exponentially-increasing retry interval.
118
+ We automatically retry after the retry interval expires (roughly, the logic to do so
119
+ being triggered every minute).
120
+
121
+ If the backoff grows too large (> 1 hour), the in-memory queue is emptied (to prevent
122
+ unbounded growth) and Catch-Up Mode is entered.
123
+
124
+ It is worth noting that the back-off for a remote server is cleared once an inbound
125
+ request from that remote server is received (see `notify_remote_server_up`).
126
+ At this point, the transaction transmission loop is also started up, to proactively
127
+ send missed PDUs and EDUs to the destination (i.e. you don't need to wait for a new PDU
128
+ or EDU, destined for that destination, to be created in order to send out missed PDUs and
129
+ EDUs).
130
+ """
131
+
132
+ import abc
133
+ import logging
134
+ from collections import OrderedDict
135
+ from typing import (
136
+ TYPE_CHECKING,
137
+ Collection,
138
+ Hashable,
139
+ Iterable,
140
+ Literal,
141
+ )
142
+
143
+ import attr
144
+ from prometheus_client import Counter
145
+
146
+ from twisted.internet import defer
147
+
148
+ import synapse.metrics
149
+ from synapse.api.constants import EventTypes, Membership
150
+ from synapse.api.presence import UserPresenceState
151
+ from synapse.events import EventBase
152
+ from synapse.federation.sender.per_destination_queue import (
153
+ CATCHUP_RETRY_INTERVAL,
154
+ PerDestinationQueue,
155
+ )
156
+ from synapse.federation.sender.transaction_manager import TransactionManager
157
+ from synapse.federation.units import Edu
158
+ from synapse.logging.context import make_deferred_yieldable, run_in_background
159
+ from synapse.metrics import (
160
+ SERVER_NAME_LABEL,
161
+ LaterGauge,
162
+ event_processing_loop_counter,
163
+ event_processing_loop_room_count,
164
+ events_processed_counter,
165
+ )
166
+ from synapse.metrics.background_process_metrics import (
167
+ wrap_as_background_process,
168
+ )
169
+ from synapse.types import (
170
+ JsonDict,
171
+ ReadReceipt,
172
+ RoomStreamToken,
173
+ StrCollection,
174
+ get_domain_from_id,
175
+ )
176
+ from synapse.util.clock import Clock
177
+ from synapse.util.metrics import Measure
178
+ from synapse.util.retryutils import filter_destinations_by_retry_limiter
179
+
180
+ if TYPE_CHECKING:
181
+ from synapse.events.presence_router import PresenceRouter
182
+ from synapse.server import HomeServer
183
+
184
+ logger = logging.getLogger(__name__)
185
+
186
+ sent_pdus_destination_dist_count = Counter(
187
+ "synapse_federation_client_sent_pdu_destinations_count",
188
+ "Number of PDUs queued for sending to one or more destinations",
189
+ labelnames=[SERVER_NAME_LABEL],
190
+ )
191
+
192
+ sent_pdus_destination_dist_total = Counter(
193
+ "synapse_federation_client_sent_pdu_destinations",
194
+ "Total number of PDUs queued for sending across all destinations",
195
+ labelnames=[SERVER_NAME_LABEL],
196
+ )
197
+
198
+ transaction_queue_pending_destinations_gauge = LaterGauge(
199
+ name="synapse_federation_transaction_queue_pending_destinations",
200
+ desc="",
201
+ labelnames=[SERVER_NAME_LABEL],
202
+ )
203
+
204
+ transaction_queue_pending_pdus_gauge = LaterGauge(
205
+ name="synapse_federation_transaction_queue_pending_pdus",
206
+ desc="",
207
+ labelnames=[SERVER_NAME_LABEL],
208
+ )
209
+
210
+ transaction_queue_pending_edus_gauge = LaterGauge(
211
+ name="synapse_federation_transaction_queue_pending_edus",
212
+ desc="",
213
+ labelnames=[SERVER_NAME_LABEL],
214
+ )
215
+
216
+ # Time (in s) to wait before trying to wake up destinations that have
217
+ # catch-up outstanding.
218
+ # Please note that rate limiting still applies, so while the loop is
219
+ # executed every X seconds the destinations may not be woken up because
220
+ # they are being rate limited following previous attempt failures.
221
+ WAKEUP_RETRY_PERIOD_SEC = 60
222
+
223
+ # Time (in s) to wait in between waking up each destination, i.e. one destination
224
+ # will be woken up every <x> seconds until we have woken every destination
225
+ # has outstanding catch-up.
226
+ WAKEUP_INTERVAL_BETWEEN_DESTINATIONS_SEC = 5
227
+
228
+
229
+ class AbstractFederationSender(metaclass=abc.ABCMeta):
230
+ @abc.abstractmethod
231
+ def shutdown(self) -> None:
232
+ """Stops this federation sender instance from sending further transactions."""
233
+ raise NotImplementedError()
234
+
235
+ @abc.abstractmethod
236
+ def notify_new_events(self, max_token: RoomStreamToken) -> None:
237
+ """This gets called when we have some new events we might want to
238
+ send out to other servers.
239
+ """
240
+ raise NotImplementedError()
241
+
242
+ @abc.abstractmethod
243
+ async def send_read_receipt(self, receipt: ReadReceipt) -> None:
244
+ """Send a RR to any other servers in the room
245
+
246
+ Args:
247
+ receipt: receipt to be sent
248
+ """
249
+ raise NotImplementedError()
250
+
251
+ @abc.abstractmethod
252
+ async def send_presence_to_destinations(
253
+ self, states: Iterable[UserPresenceState], destinations: Iterable[str]
254
+ ) -> None:
255
+ """Send the given presence states to the given destinations.
256
+
257
+ Args:
258
+ destinations:
259
+ """
260
+ raise NotImplementedError()
261
+
262
+ @abc.abstractmethod
263
+ def build_and_send_edu(
264
+ self,
265
+ destination: str,
266
+ edu_type: str,
267
+ content: JsonDict,
268
+ key: Hashable | None = None,
269
+ ) -> None:
270
+ """Construct an Edu object, and queue it for sending
271
+
272
+ Args:
273
+ destination: name of server to send to
274
+ edu_type: type of EDU to send
275
+ content: content of EDU
276
+ key: clobbering key for this edu
277
+ """
278
+ raise NotImplementedError()
279
+
280
+ @abc.abstractmethod
281
+ async def send_device_messages(
282
+ self, destinations: StrCollection, immediate: bool = True
283
+ ) -> None:
284
+ """Tells the sender that a new device message is ready to be sent to the
285
+ destinations. The `immediate` flag specifies whether the messages should
286
+ be tried to be sent immediately, or whether it can be delayed for a
287
+ short while (to aid performance).
288
+ """
289
+ raise NotImplementedError()
290
+
291
+ @abc.abstractmethod
292
+ def wake_destination(self, destination: str) -> None:
293
+ """Called when we want to retry sending transactions to a remote.
294
+
295
+ This is mainly useful if the remote server has been down and we think it
296
+ might have come back.
297
+ """
298
+ raise NotImplementedError()
299
+
300
+ @abc.abstractmethod
301
+ def get_current_token(self) -> int:
302
+ raise NotImplementedError()
303
+
304
+ @abc.abstractmethod
305
+ def federation_ack(self, instance_name: str, token: int) -> None:
306
+ raise NotImplementedError()
307
+
308
+ @abc.abstractmethod
309
+ async def get_replication_rows(
310
+ self, instance_name: str, from_token: int, to_token: int, target_row_count: int
311
+ ) -> tuple[list[tuple[int, tuple]], int, bool]:
312
+ raise NotImplementedError()
313
+
314
+
315
+ @attr.s
316
+ class _DestinationWakeupQueue:
317
+ """A queue of destinations that need to be woken up due to new updates.
318
+
319
+ Staggers waking up of per destination queues to ensure that we don't attempt
320
+ to start TLS connections with many hosts all at once, leading to pinned CPU.
321
+
322
+ """
323
+
324
+ # The maximum duration in seconds between queuing up a destination and it
325
+ # being woken up.
326
+ _MAX_TIME_IN_QUEUE = 30.0
327
+
328
+ sender: "FederationSender" = attr.ib()
329
+ hs: "HomeServer" = attr.ib()
330
+ server_name: str = attr.ib()
331
+ """
332
+ Our homeserver name (used to label metrics) (`hs.hostname`).
333
+ """
334
+ clock: Clock = attr.ib()
335
+ max_delay_s: int = attr.ib()
336
+
337
+ queue: "OrderedDict[str, Literal[None]]" = attr.ib(factory=OrderedDict)
338
+ processing: bool = attr.ib(default=False)
339
+
340
+ def add_to_queue(self, destination: str) -> None:
341
+ """Add a destination to the queue to be woken up."""
342
+
343
+ self.queue[destination] = None
344
+
345
+ if not self.processing:
346
+ self._handle()
347
+
348
+ @wrap_as_background_process("_DestinationWakeupQueue.handle")
349
+ async def _handle(self) -> None:
350
+ """Background process to drain the queue."""
351
+
352
+ if not self.queue:
353
+ return
354
+
355
+ assert not self.processing
356
+ self.processing = True
357
+
358
+ try:
359
+ # We start with a delay that should drain the queue quickly enough that
360
+ # we process all destinations in the queue in _MAX_TIME_IN_QUEUE
361
+ # seconds.
362
+ #
363
+ # We also add an upper bound to the delay, to gracefully handle the
364
+ # case where the queue only has a few entries in it.
365
+ current_sleep_seconds = min(
366
+ self.max_delay_s, self._MAX_TIME_IN_QUEUE / len(self.queue)
367
+ )
368
+
369
+ while self.queue:
370
+ destination, _ = self.queue.popitem(last=False)
371
+
372
+ queue = self.sender._get_per_destination_queue(destination)
373
+ if queue is None:
374
+ continue
375
+
376
+ if not queue._new_data_to_send:
377
+ # The per destination queue has already been woken up.
378
+ continue
379
+
380
+ queue.attempt_new_transaction()
381
+
382
+ await self.clock.sleep(current_sleep_seconds)
383
+
384
+ if not self.queue:
385
+ break
386
+
387
+ # More destinations may have been added to the queue, so we may
388
+ # need to reduce the delay to ensure everything gets processed
389
+ # within _MAX_TIME_IN_QUEUE seconds.
390
+ current_sleep_seconds = min(
391
+ current_sleep_seconds, self._MAX_TIME_IN_QUEUE / len(self.queue)
392
+ )
393
+
394
+ finally:
395
+ self.processing = False
396
+
397
+
398
+ class FederationSender(AbstractFederationSender):
399
+ def __init__(self, hs: "HomeServer"):
400
+ self.hs = hs
401
+ self.server_name = hs.hostname
402
+
403
+ self.store = hs.get_datastores().main
404
+ self.state = hs.get_state_handler()
405
+
406
+ self._storage_controllers = hs.get_storage_controllers()
407
+
408
+ self.clock = hs.get_clock()
409
+ self.is_mine_id = hs.is_mine_id
410
+ self.is_mine_server_name = hs.is_mine_server_name
411
+
412
+ self._presence_router: "PresenceRouter" | None = None
413
+ self._transaction_manager = TransactionManager(hs)
414
+
415
+ self._instance_name = hs.get_instance_name()
416
+ self._federation_shard_config = hs.config.worker.federation_shard_config
417
+
418
+ # map from destination to PerDestinationQueue
419
+ self._per_destination_queues: dict[str, PerDestinationQueue] = {}
420
+
421
+ transaction_queue_pending_destinations_gauge.register_hook(
422
+ homeserver_instance_id=hs.get_instance_id(),
423
+ hook=lambda: {
424
+ (self.server_name,): sum(
425
+ 1
426
+ for d in self._per_destination_queues.values()
427
+ if d.transmission_loop_running
428
+ )
429
+ },
430
+ )
431
+ transaction_queue_pending_pdus_gauge.register_hook(
432
+ homeserver_instance_id=hs.get_instance_id(),
433
+ hook=lambda: {
434
+ (self.server_name,): sum(
435
+ d.pending_pdu_count() for d in self._per_destination_queues.values()
436
+ )
437
+ },
438
+ )
439
+ transaction_queue_pending_edus_gauge.register_hook(
440
+ homeserver_instance_id=hs.get_instance_id(),
441
+ hook=lambda: {
442
+ (self.server_name,): sum(
443
+ d.pending_edu_count() for d in self._per_destination_queues.values()
444
+ )
445
+ },
446
+ )
447
+
448
+ self._is_processing = False
449
+ self._last_poked_id = -1
450
+
451
+ self._external_cache = hs.get_external_cache()
452
+
453
+ rr_txn_interval_per_room_s = (
454
+ 1.0 / hs.config.ratelimiting.federation_rr_transactions_per_room_per_second
455
+ )
456
+ self._destination_wakeup_queue = _DestinationWakeupQueue(
457
+ self,
458
+ hs,
459
+ self.server_name,
460
+ self.clock,
461
+ max_delay_s=rr_txn_interval_per_room_s,
462
+ )
463
+
464
+ # It is important for `_is_shutdown` to be instantiated before the looping call
465
+ # for `wake_destinations_needing_catchup`.
466
+ self._is_shutdown = False
467
+
468
+ # Regularly wake up destinations that have outstanding PDUs to be caught up
469
+ self.clock.looping_call_now(
470
+ self.hs.run_as_background_process,
471
+ WAKEUP_RETRY_PERIOD_SEC * 1000.0,
472
+ "wake_destinations_needing_catchup",
473
+ self._wake_destinations_needing_catchup,
474
+ )
475
+
476
+ def shutdown(self) -> None:
477
+ self._is_shutdown = True
478
+ for queue in self._per_destination_queues.values():
479
+ queue.shutdown()
480
+
481
+ def _get_per_destination_queue(
482
+ self, destination: str
483
+ ) -> PerDestinationQueue | None:
484
+ """Get or create a PerDestinationQueue for the given destination
485
+
486
+ Args:
487
+ destination: server_name of remote server
488
+
489
+ Returns:
490
+ None if the destination is not allowed by the federation whitelist.
491
+ Otherwise a PerDestinationQueue for this destination.
492
+ """
493
+ if not self.hs.config.federation.is_domain_allowed_according_to_federation_whitelist(
494
+ destination
495
+ ):
496
+ return None
497
+
498
+ queue = self._per_destination_queues.get(destination)
499
+ if not queue:
500
+ queue = PerDestinationQueue(self.hs, self._transaction_manager, destination)
501
+ self._per_destination_queues[destination] = queue
502
+ return queue
503
+
504
+ def notify_new_events(self, max_token: RoomStreamToken) -> None:
505
+ """This gets called when we have some new events we might want to
506
+ send out to other servers.
507
+ """
508
+ # We just use the minimum stream ordering and ignore the vector clock
509
+ # component. This is safe to do as long as we *always* ignore the vector
510
+ # clock components.
511
+ current_id = max_token.stream
512
+
513
+ self._last_poked_id = max(current_id, self._last_poked_id)
514
+
515
+ if self._is_processing:
516
+ return
517
+
518
+ # fire off a processing loop in the background
519
+ self.hs.run_as_background_process(
520
+ "process_event_queue_for_federation",
521
+ self._process_event_queue_loop,
522
+ )
523
+
524
+ async def _process_event_queue_loop(self) -> None:
525
+ try:
526
+ self._is_processing = True
527
+ while not self._is_shutdown:
528
+ last_token = await self.store.get_federation_out_pos("events")
529
+ (
530
+ next_token,
531
+ event_to_received_ts,
532
+ ) = await self.store.get_all_new_event_ids_stream(
533
+ last_token, self._last_poked_id, limit=100
534
+ )
535
+
536
+ event_ids = event_to_received_ts.keys()
537
+ event_entries = await self.store.get_unredacted_events_from_cache_or_db(
538
+ event_ids
539
+ )
540
+
541
+ logger.debug(
542
+ "Handling %i -> %i: %i events to send (current id %i)",
543
+ last_token,
544
+ next_token,
545
+ len(event_entries),
546
+ self._last_poked_id,
547
+ )
548
+
549
+ if not event_entries and next_token >= self._last_poked_id:
550
+ logger.debug("All events processed")
551
+ break
552
+
553
+ async def handle_event(event: EventBase) -> None:
554
+ # Only send events for this server.
555
+ send_on_behalf_of = event.internal_metadata.get_send_on_behalf_of()
556
+ is_mine = self.is_mine_id(event.sender)
557
+ if not is_mine and send_on_behalf_of is None:
558
+ logger.debug("Not sending remote-origin event %s", event)
559
+ return
560
+
561
+ # We also want to not send out-of-band membership events.
562
+ #
563
+ # OOB memberships are used in three (and a half) situations:
564
+ #
565
+ # (1) invite events which we have received over federation. Those
566
+ # will have a `sender` on a different server, so will be
567
+ # skipped by the "is_mine" test above anyway.
568
+ #
569
+ # (2) rejections of invites to federated rooms - either remotely
570
+ # or locally generated. (Such rejections are normally
571
+ # created via federation, in which case the remote server is
572
+ # responsible for sending out the rejection. If that fails,
573
+ # we'll create a leave event locally, but that's only really
574
+ # for the benefit of the invited user - we don't have enough
575
+ # information to send it out over federation).
576
+ #
577
+ # (2a) rescinded knocks. These are identical to rejected invites.
578
+ #
579
+ # (3) knock events which we have sent over federation. As with
580
+ # invite rejections, the remote server should send them out to
581
+ # the federation.
582
+ #
583
+ # So, in all the above cases, we want to ignore such events.
584
+ #
585
+ # OOB memberships are always(?) outliers anyway, so if we *don't*
586
+ # ignore them, we'll get an exception further down when we try to
587
+ # fetch the membership list for the room.
588
+ #
589
+ # Arguably, we could equivalently ignore all outliers here, since
590
+ # in theory the only way for an outlier with a local `sender` to
591
+ # exist is by being an OOB membership (via one of (2), (2a) or (3)
592
+ # above).
593
+ #
594
+ if event.internal_metadata.is_out_of_band_membership():
595
+ logger.debug("Not sending OOB membership event %s", event)
596
+ return
597
+
598
+ # Finally, there are some other events that we should not send out
599
+ # until someone asks for them. They are explicitly flagged as such
600
+ # with `proactively_send: False`.
601
+ if not event.internal_metadata.should_proactively_send():
602
+ logger.debug(
603
+ "Not sending event with proactively_send=false: %s", event
604
+ )
605
+ return
606
+
607
+ destinations: Collection[str] | None = None
608
+ if not event.prev_event_ids():
609
+ # If there are no prev event IDs then the state is empty
610
+ # and so no remote servers in the room
611
+ destinations = set()
612
+
613
+ if destinations is None:
614
+ # During partial join we use the set of servers that we got
615
+ # when beginning the join. It's still possible that we send
616
+ # events to servers that left the room in the meantime, but
617
+ # we consider that an acceptable risk since it is only our own
618
+ # events that we leak and not other server's ones.
619
+ partial_state_destinations = (
620
+ await self.store.get_partial_state_servers_at_join(
621
+ event.room_id
622
+ )
623
+ )
624
+
625
+ if partial_state_destinations is not None:
626
+ destinations = partial_state_destinations
627
+
628
+ if destinations is None:
629
+ # We check the external cache for the destinations, which is
630
+ # stored per state group.
631
+
632
+ sg = await self._external_cache.get(
633
+ "event_to_prev_state_group", event.event_id
634
+ )
635
+ if sg:
636
+ destinations = await self._external_cache.get(
637
+ "get_joined_hosts", str(sg)
638
+ )
639
+ if destinations is None:
640
+ # Add logging to help track down https://github.com/matrix-org/synapse/issues/13444
641
+ logger.info(
642
+ "Unexpectedly did not have cached destinations for %s / %s",
643
+ sg,
644
+ event.event_id,
645
+ )
646
+ else:
647
+ # Add logging to help track down https://github.com/matrix-org/synapse/issues/13444
648
+ logger.info(
649
+ "Unexpectedly did not have cached prev group for %s",
650
+ event.event_id,
651
+ )
652
+
653
+ if destinations is None:
654
+ try:
655
+ # Get the state from before the event.
656
+ # We need to make sure that this is the state from before
657
+ # the event and not from after it.
658
+ # Otherwise if the last member on a server in a room is
659
+ # banned then it won't receive the event because it won't
660
+ # be in the room after the ban.
661
+ destinations = await self.state.get_hosts_in_room_at_events(
662
+ event.room_id, event_ids=event.prev_event_ids()
663
+ )
664
+ except Exception:
665
+ logger.exception(
666
+ "Failed to calculate hosts in room for event: %s",
667
+ event.event_id,
668
+ )
669
+ return
670
+
671
+ # If we've rescinded an invite then we want to tell the
672
+ # other server.
673
+ if (
674
+ event.type == EventTypes.Member
675
+ and event.membership == Membership.LEAVE
676
+ and event.sender != event.state_key
677
+ ):
678
+ # We check if this leave event is rescinding an invite
679
+ # by looking if there is an invite event for the user in
680
+ # the auth events. It could otherwise be a kick or
681
+ # unban, which we don't want to send (if the user wasn't
682
+ # already in the room).
683
+ auth_events = await self.store.get_events_as_list(
684
+ event.auth_event_ids()
685
+ )
686
+ for auth_event in auth_events:
687
+ if (
688
+ auth_event.type == EventTypes.Member
689
+ and auth_event.state_key == event.state_key
690
+ and auth_event.membership == Membership.INVITE
691
+ ):
692
+ destinations = set(destinations)
693
+ destinations.add(get_domain_from_id(event.state_key))
694
+ break
695
+
696
+ sharded_destinations = {
697
+ d
698
+ for d in destinations
699
+ if self._federation_shard_config.should_handle(
700
+ self._instance_name, d
701
+ )
702
+ }
703
+
704
+ if send_on_behalf_of is not None:
705
+ # If we are sending the event on behalf of another server
706
+ # then it already has the event and there is no reason to
707
+ # send the event to it.
708
+ sharded_destinations.discard(send_on_behalf_of)
709
+
710
+ logger.debug("Sending %s to %r", event, sharded_destinations)
711
+
712
+ if sharded_destinations:
713
+ await self._send_pdu(event, sharded_destinations)
714
+
715
+ now = self.clock.time_msec()
716
+ ts = event_to_received_ts[event.event_id]
717
+ assert ts is not None
718
+ synapse.metrics.event_processing_lag_by_event.labels(
719
+ name="federation_sender",
720
+ **{SERVER_NAME_LABEL: self.server_name},
721
+ ).observe((now - ts) / 1000)
722
+
723
+ async def handle_room_events(events: list[EventBase]) -> None:
724
+ logger.debug(
725
+ "Handling %i events in room %s", len(events), events[0].room_id
726
+ )
727
+ with Measure(
728
+ self.clock,
729
+ name="handle_room_events",
730
+ server_name=self.server_name,
731
+ ):
732
+ for event in events:
733
+ await handle_event(event)
734
+
735
+ events_by_room: dict[str, list[EventBase]] = {}
736
+
737
+ for event_id in event_ids:
738
+ # `event_entries` is unsorted, so we have to iterate over `event_ids`
739
+ # to ensure the events are in the right order
740
+ event_cache = event_entries.get(event_id)
741
+ if event_cache:
742
+ event = event_cache.event
743
+ events_by_room.setdefault(event.room_id, []).append(event)
744
+
745
+ await make_deferred_yieldable(
746
+ defer.gatherResults(
747
+ [
748
+ run_in_background(handle_room_events, evs)
749
+ for evs in events_by_room.values()
750
+ ],
751
+ consumeErrors=True,
752
+ )
753
+ )
754
+
755
+ logger.debug("Successfully handled up to %i", next_token)
756
+ await self.store.update_federation_out_pos("events", next_token)
757
+
758
+ if event_entries:
759
+ now = self.clock.time_msec()
760
+ ts = max(t for t in event_to_received_ts.values() if t)
761
+ assert ts is not None
762
+
763
+ synapse.metrics.event_processing_lag.labels(
764
+ name="federation_sender",
765
+ **{SERVER_NAME_LABEL: self.server_name},
766
+ ).set(now - ts)
767
+ synapse.metrics.event_processing_last_ts.labels(
768
+ name="federation_sender",
769
+ **{SERVER_NAME_LABEL: self.server_name},
770
+ ).set(ts)
771
+
772
+ events_processed_counter.labels(
773
+ **{SERVER_NAME_LABEL: self.server_name}
774
+ ).inc(len(event_entries))
775
+
776
+ event_processing_loop_room_count.labels(
777
+ name="federation_sender",
778
+ **{SERVER_NAME_LABEL: self.server_name},
779
+ ).inc(len(events_by_room))
780
+
781
+ event_processing_loop_counter.labels(
782
+ name="federation_sender",
783
+ **{SERVER_NAME_LABEL: self.server_name},
784
+ ).inc()
785
+
786
+ synapse.metrics.event_processing_positions.labels(
787
+ name="federation_sender", **{SERVER_NAME_LABEL: self.server_name}
788
+ ).set(next_token)
789
+
790
+ finally:
791
+ self._is_processing = False
792
+
793
+ async def _send_pdu(self, pdu: EventBase, destinations: Iterable[str]) -> None:
794
+ # We loop through all destinations to see whether we already have
795
+ # a transaction in progress. If we do, stick it in the pending_pdus
796
+ # table and we'll get back to it later.
797
+
798
+ destinations = set(destinations)
799
+ destinations.discard(self.server_name)
800
+ logger.debug("Sending to: %s", str(destinations))
801
+
802
+ if not destinations:
803
+ return
804
+
805
+ sent_pdus_destination_dist_total.labels(
806
+ **{SERVER_NAME_LABEL: self.server_name}
807
+ ).inc(len(destinations))
808
+ sent_pdus_destination_dist_count.labels(
809
+ **{SERVER_NAME_LABEL: self.server_name}
810
+ ).inc()
811
+
812
+ assert pdu.internal_metadata.stream_ordering
813
+
814
+ # track the fact that we have a PDU for these destinations,
815
+ # to allow us to perform catch-up later on if the remote is unreachable
816
+ # for a while.
817
+ # Filter out any destinations not present in the federation_domain_whitelist, if
818
+ # the whitelist exists. These destinations should not be sent to so let's not
819
+ # waste time or space keeping track of events destined for them.
820
+ destinations = [
821
+ d
822
+ for d in destinations
823
+ if self.hs.config.federation.is_domain_allowed_according_to_federation_whitelist(
824
+ d
825
+ )
826
+ ]
827
+ await self.store.store_destination_rooms_entries(
828
+ destinations,
829
+ pdu.room_id,
830
+ pdu.internal_metadata.stream_ordering,
831
+ )
832
+
833
+ destinations = await filter_destinations_by_retry_limiter(
834
+ destinations,
835
+ clock=self.clock,
836
+ store=self.store,
837
+ retry_due_within_ms=CATCHUP_RETRY_INTERVAL,
838
+ )
839
+
840
+ for destination in destinations:
841
+ queue = self._get_per_destination_queue(destination)
842
+ # We expect `queue` to not be None as we already filtered out
843
+ # non-whitelisted destinations above.
844
+ assert queue is not None
845
+
846
+ queue.send_pdu(pdu)
847
+
848
+ async def send_read_receipt(self, receipt: ReadReceipt) -> None:
849
+ """Send a RR to any other servers in the room
850
+
851
+ Args:
852
+ receipt: receipt to be sent
853
+ """
854
+
855
+ # Some background on the rate-limiting going on here.
856
+ #
857
+ # It turns out that if we attempt to send out RRs as soon as we get them
858
+ # from a client, then we end up trying to do several hundred Hz of
859
+ # federation transactions. (The number of transactions scales as O(N^2)
860
+ # on the size of a room, since in a large room we have both more RRs
861
+ # coming in, and more servers to send them to.)
862
+ #
863
+ # This leads to a lot of CPU load, and we end up getting behind. The
864
+ # solution currently adopted is to differentiate between receipts and
865
+ # destinations we should immediately send to, and those we can trickle
866
+ # the receipts to.
867
+ #
868
+ # The current logic is to send receipts out immediately if:
869
+ # - the room is "small", i.e. there's only N servers to send receipts
870
+ # to, and so sending out the receipts immediately doesn't cause too
871
+ # much load; or
872
+ # - the receipt is for an event that happened recently, as users
873
+ # notice if receipts are delayed when they know other users are
874
+ # currently reading the room; or
875
+ # - the receipt is being sent to the server that sent the event, so
876
+ # that users see receipts for their own receipts quickly.
877
+ #
878
+ # For destinations that we should delay sending the receipt to, we queue
879
+ # the receipts up to be sent in the next transaction, but don't trigger
880
+ # a new transaction to be sent. We then add the destination to the
881
+ # `DestinationWakeupQueue`, which will slowly iterate over each
882
+ # destination and trigger a new transaction to be sent.
883
+ #
884
+ # However, in practice, it is often possible to send out delayed
885
+ # receipts earlier: in particular, if we are sending a transaction to a
886
+ # given server anyway (for example, because we have a PDU or a RR in
887
+ # another room to send), then we may as well send out all of the pending
888
+ # RRs for that server. So it may be that by the time we get to waking up
889
+ # the destination, we don't actually have any RRs left to send out.
890
+ #
891
+ # For even more background, see
892
+ # https://github.com/matrix-org/synapse/issues/4730.
893
+
894
+ room_id = receipt.room_id
895
+
896
+ # Local read receipts always have 1 event ID.
897
+ event_id = receipt.event_ids[0]
898
+
899
+ # Work out which remote servers should be poked and poke them.
900
+ domains_set = await self._storage_controllers.state.get_current_hosts_in_room_or_partial_state_approximation(
901
+ room_id
902
+ )
903
+ domains: StrCollection = [
904
+ d
905
+ for d in domains_set
906
+ if not self.is_mine_server_name(d)
907
+ and self._federation_shard_config.should_handle(self._instance_name, d)
908
+ ]
909
+
910
+ domains = await filter_destinations_by_retry_limiter(
911
+ domains,
912
+ clock=self.clock,
913
+ store=self.store,
914
+ retry_due_within_ms=CATCHUP_RETRY_INTERVAL,
915
+ )
916
+
917
+ if not domains:
918
+ return
919
+
920
+ # We now split which domains we want to wake up immediately vs which we
921
+ # want to delay waking up.
922
+ immediate_domains: StrCollection
923
+ delay_domains: StrCollection
924
+
925
+ if len(domains) < 10:
926
+ # For "small" rooms send to all domains immediately
927
+ immediate_domains = domains
928
+ delay_domains = ()
929
+ else:
930
+ metadata = await self.store.get_metadata_for_event(
931
+ receipt.room_id, event_id
932
+ )
933
+ assert metadata is not None
934
+
935
+ sender_domain = get_domain_from_id(metadata.sender)
936
+
937
+ if self.clock.time_msec() - metadata.received_ts < 60_000:
938
+ # We always send receipts for recent messages immediately
939
+ immediate_domains = domains
940
+ delay_domains = ()
941
+ else:
942
+ # Otherwise, we delay waking up all destinations except for the
943
+ # sender's domain.
944
+ immediate_domains = []
945
+ delay_domains = []
946
+ for domain in domains:
947
+ if domain == sender_domain:
948
+ immediate_domains.append(domain)
949
+ else:
950
+ delay_domains.append(domain)
951
+
952
+ for domain in immediate_domains:
953
+ # Add to destination queue and wake the destination up
954
+ queue = self._get_per_destination_queue(domain)
955
+ if queue is None:
956
+ continue
957
+ queue.queue_read_receipt(receipt)
958
+ queue.attempt_new_transaction()
959
+
960
+ for domain in delay_domains:
961
+ # Add to destination queue...
962
+ queue = self._get_per_destination_queue(domain)
963
+ if queue is None:
964
+ continue
965
+ queue.queue_read_receipt(receipt)
966
+
967
+ # ... and schedule the destination to be woken up.
968
+ self._destination_wakeup_queue.add_to_queue(domain)
969
+
970
+ async def send_presence_to_destinations(
971
+ self, states: Iterable[UserPresenceState], destinations: Iterable[str]
972
+ ) -> None:
973
+ """Send the given presence states to the given destinations.
974
+ destinations (list[str])
975
+ """
976
+
977
+ if not states or not self.hs.config.server.track_presence:
978
+ # No-op if presence is disabled.
979
+ return
980
+
981
+ # Ensure we only send out presence states for local users.
982
+ for state in states:
983
+ assert self.is_mine_id(state.user_id)
984
+
985
+ destinations = await filter_destinations_by_retry_limiter(
986
+ [
987
+ d
988
+ for d in destinations
989
+ if self._federation_shard_config.should_handle(self._instance_name, d)
990
+ ],
991
+ clock=self.clock,
992
+ store=self.store,
993
+ retry_due_within_ms=CATCHUP_RETRY_INTERVAL,
994
+ )
995
+
996
+ for destination in destinations:
997
+ if self.is_mine_server_name(destination):
998
+ continue
999
+
1000
+ queue = self._get_per_destination_queue(destination)
1001
+ if queue is None:
1002
+ continue
1003
+ queue.send_presence(states, start_loop=False)
1004
+
1005
+ self._destination_wakeup_queue.add_to_queue(destination)
1006
+
1007
+ def build_and_send_edu(
1008
+ self,
1009
+ destination: str,
1010
+ edu_type: str,
1011
+ content: JsonDict,
1012
+ key: Hashable | None = None,
1013
+ ) -> None:
1014
+ """Construct an Edu object, and queue it for sending
1015
+
1016
+ Args:
1017
+ destination: name of server to send to
1018
+ edu_type: type of EDU to send
1019
+ content: content of EDU
1020
+ key: clobbering key for this edu
1021
+ """
1022
+ if self.is_mine_server_name(destination):
1023
+ logger.info("Not sending EDU to ourselves")
1024
+ return
1025
+
1026
+ if not self._federation_shard_config.should_handle(
1027
+ self._instance_name, destination
1028
+ ):
1029
+ return
1030
+
1031
+ edu = Edu(
1032
+ origin=self.server_name,
1033
+ destination=destination,
1034
+ edu_type=edu_type,
1035
+ content=content,
1036
+ )
1037
+
1038
+ self.send_edu(edu, key)
1039
+
1040
+ def send_edu(self, edu: Edu, key: Hashable | None) -> None:
1041
+ """Queue an EDU for sending
1042
+
1043
+ Args:
1044
+ edu: edu to send
1045
+ key: clobbering key for this edu
1046
+ """
1047
+ if not self._federation_shard_config.should_handle(
1048
+ self._instance_name, edu.destination
1049
+ ):
1050
+ return
1051
+
1052
+ queue = self._get_per_destination_queue(edu.destination)
1053
+ if queue is None:
1054
+ return
1055
+ if key:
1056
+ queue.send_keyed_edu(edu, key)
1057
+ else:
1058
+ queue.send_edu(edu)
1059
+
1060
+ async def send_device_messages(
1061
+ self, destinations: StrCollection, immediate: bool = True
1062
+ ) -> None:
1063
+ destinations = await filter_destinations_by_retry_limiter(
1064
+ [
1065
+ destination
1066
+ for destination in destinations
1067
+ if self._federation_shard_config.should_handle(
1068
+ self._instance_name, destination
1069
+ )
1070
+ and not self.is_mine_server_name(destination)
1071
+ ],
1072
+ clock=self.clock,
1073
+ store=self.store,
1074
+ retry_due_within_ms=CATCHUP_RETRY_INTERVAL,
1075
+ )
1076
+
1077
+ for destination in destinations:
1078
+ if immediate:
1079
+ queue = self._get_per_destination_queue(destination)
1080
+ if queue is None:
1081
+ continue
1082
+ queue.attempt_new_transaction()
1083
+ else:
1084
+ queue = self._get_per_destination_queue(destination)
1085
+ if queue is None:
1086
+ continue
1087
+ queue.mark_new_data()
1088
+ self._destination_wakeup_queue.add_to_queue(destination)
1089
+
1090
+ def wake_destination(self, destination: str) -> None:
1091
+ """Called when we want to retry sending transactions to a remote.
1092
+
1093
+ This is mainly useful if the remote server has been down and we think it
1094
+ might have come back.
1095
+ """
1096
+
1097
+ if self.is_mine_server_name(destination):
1098
+ logger.warning("Not waking up ourselves")
1099
+ return
1100
+
1101
+ if not self._federation_shard_config.should_handle(
1102
+ self._instance_name, destination
1103
+ ):
1104
+ return
1105
+
1106
+ queue = self._get_per_destination_queue(destination)
1107
+ if queue is not None:
1108
+ queue.attempt_new_transaction()
1109
+
1110
+ @staticmethod
1111
+ def get_current_token() -> int:
1112
+ # Dummy implementation for case where federation sender isn't offloaded
1113
+ # to a worker.
1114
+ return 0
1115
+
1116
+ def federation_ack(self, instance_name: str, token: int) -> None:
1117
+ # It is not expected that this gets called on FederationSender.
1118
+ raise NotImplementedError()
1119
+
1120
+ @staticmethod
1121
+ async def get_replication_rows(
1122
+ instance_name: str, from_token: int, to_token: int, target_row_count: int
1123
+ ) -> tuple[list[tuple[int, tuple]], int, bool]:
1124
+ # Dummy implementation for case where federation sender isn't offloaded
1125
+ # to a worker.
1126
+ return [], 0, False
1127
+
1128
+ async def _wake_destinations_needing_catchup(self) -> None:
1129
+ """
1130
+ Wakes up destinations that need catch-up and are not currently being
1131
+ backed off from.
1132
+
1133
+ In order to reduce load spikes, adds a delay between each destination.
1134
+ """
1135
+
1136
+ last_processed: str | None = None
1137
+
1138
+ while not self._is_shutdown:
1139
+ destinations_to_wake = (
1140
+ await self.store.get_catch_up_outstanding_destinations(last_processed)
1141
+ )
1142
+
1143
+ if not destinations_to_wake:
1144
+ # finished waking all destinations!
1145
+ break
1146
+
1147
+ last_processed = destinations_to_wake[-1]
1148
+
1149
+ destinations_to_wake = [
1150
+ d
1151
+ for d in destinations_to_wake
1152
+ if self._federation_shard_config.should_handle(self._instance_name, d)
1153
+ and self.hs.config.federation.is_domain_allowed_according_to_federation_whitelist(
1154
+ d
1155
+ )
1156
+ ]
1157
+
1158
+ for destination in destinations_to_wake:
1159
+ logger.info(
1160
+ "Destination %s has outstanding catch-up, waking up.",
1161
+ last_processed,
1162
+ )
1163
+ self.wake_destination(destination)
1164
+ await self.clock.sleep(WAKEUP_INTERVAL_BETWEEN_DESTINATIONS_SEC)