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,1022 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2014-2016 OpenMarket Ltd
5
+ # Copyright (C) 2023 New Vector, Ltd
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as
9
+ # published by the Free Software Foundation, either version 3 of the
10
+ # License, or (at your option) any later version.
11
+ #
12
+ # See the GNU Affero General Public License for more details:
13
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
14
+ #
15
+ # Originally licensed under the Apache License, Version 2.0:
16
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
17
+ #
18
+ # [This file includes modifications made by New Vector Limited]
19
+ #
20
+ #
21
+ import heapq
22
+ import logging
23
+ from collections import ChainMap, defaultdict
24
+ from typing import (
25
+ TYPE_CHECKING,
26
+ Any,
27
+ Awaitable,
28
+ Callable,
29
+ Mapping,
30
+ Optional,
31
+ Sequence,
32
+ )
33
+
34
+ import attr
35
+ from immutabledict import immutabledict
36
+ from prometheus_client import Counter, Histogram
37
+
38
+ from synapse.api.constants import EventTypes
39
+ from synapse.api.room_versions import KNOWN_ROOM_VERSIONS, StateResolutionVersions
40
+ from synapse.events import EventBase
41
+ from synapse.events.snapshot import (
42
+ EventContext,
43
+ UnpersistedEventContext,
44
+ UnpersistedEventContextBase,
45
+ )
46
+ from synapse.logging.context import ContextResourceUsage
47
+ from synapse.logging.opentracing import tag_args, trace
48
+ from synapse.metrics import SERVER_NAME_LABEL
49
+ from synapse.replication.http.state import ReplicationUpdateCurrentStateRestServlet
50
+ from synapse.state import v1, v2
51
+ from synapse.storage.databases.main.event_federation import StateDifference
52
+ from synapse.storage.databases.main.events_worker import EventRedactBehaviour
53
+ from synapse.types import StateMap, StrCollection
54
+ from synapse.types.state import StateFilter
55
+ from synapse.util.async_helpers import Linearizer
56
+ from synapse.util.caches.expiringcache import ExpiringCache
57
+ from synapse.util.metrics import Measure, measure_func
58
+ from synapse.util.stringutils import shortstr
59
+
60
+ if TYPE_CHECKING:
61
+ from synapse.server import HomeServer
62
+ from synapse.storage.controllers import StateStorageController
63
+ from synapse.storage.databases.main import DataStore
64
+ from synapse.storage.databases.state.deletion import StateDeletionDataStore
65
+
66
+ logger = logging.getLogger(__name__)
67
+ metrics_logger = logging.getLogger("synapse.state.metrics")
68
+
69
+ # Metrics for number of state groups involved in a resolution.
70
+ state_groups_histogram = Histogram(
71
+ "synapse_state_number_state_groups_in_resolution",
72
+ "Number of state groups used when performing a state resolution",
73
+ labelnames=[SERVER_NAME_LABEL],
74
+ buckets=(1, 2, 3, 5, 7, 10, 15, 20, 50, 100, 200, 500, "+Inf"),
75
+ )
76
+
77
+
78
+ EVICTION_TIMEOUT_SECONDS = 60 * 60
79
+
80
+
81
+ _NEXT_STATE_ID = 1
82
+
83
+ CREATE_KEY = (EventTypes.Create, "")
84
+ POWER_KEY = (EventTypes.PowerLevels, "")
85
+
86
+
87
+ def _gen_state_id() -> str:
88
+ global _NEXT_STATE_ID
89
+ s = "X%d" % (_NEXT_STATE_ID,)
90
+ _NEXT_STATE_ID += 1
91
+ return s
92
+
93
+
94
+ class _StateCacheEntry:
95
+ __slots__ = ["_state", "state_group", "prev_group", "delta_ids"]
96
+
97
+ def __init__(
98
+ self,
99
+ state: StateMap[str] | None,
100
+ state_group: int | None,
101
+ prev_group: int | None = None,
102
+ delta_ids: StateMap[str] | None = None,
103
+ ):
104
+ if state is None and state_group is None and prev_group is None:
105
+ raise Exception("One of state, state_group or prev_group must be not None")
106
+
107
+ if prev_group is not None and delta_ids is None:
108
+ raise Exception("If prev_group is set so must delta_ids")
109
+
110
+ # A map from (type, state_key) to event_id.
111
+ #
112
+ # This can be None if we have a `state_group` (as then we can fetch the
113
+ # state from the DB.)
114
+ self._state: StateMap[str] | None = (
115
+ immutabledict(state) if state is not None else None
116
+ )
117
+
118
+ # the ID of a state group if one and only one is involved.
119
+ # otherwise, None otherwise?
120
+ self.state_group = state_group
121
+
122
+ self.prev_group = prev_group
123
+ self.delta_ids: StateMap[str] | None = (
124
+ immutabledict(delta_ids) if delta_ids is not None else None
125
+ )
126
+
127
+ async def get_state(
128
+ self,
129
+ state_storage: "StateStorageController",
130
+ state_filter: Optional["StateFilter"] = None,
131
+ ) -> StateMap[str]:
132
+ """Get the state map for this entry, either from the in-memory state or
133
+ looking up the state group in the DB.
134
+ """
135
+
136
+ if self._state is not None:
137
+ return self._state
138
+
139
+ if self.state_group is not None:
140
+ return await state_storage.get_state_ids_for_group(
141
+ self.state_group, state_filter
142
+ )
143
+
144
+ assert self.prev_group is not None and self.delta_ids is not None
145
+
146
+ prev_state = await state_storage.get_state_ids_for_group(
147
+ self.prev_group, state_filter
148
+ )
149
+
150
+ # ChainMap expects MutableMapping, but since we're using it immutably
151
+ # its safe to give it immutable maps.
152
+ return ChainMap(self.delta_ids, prev_state) # type: ignore[arg-type]
153
+
154
+ def set_state_group(self, state_group: int) -> None:
155
+ """Update the state group assigned to this state (e.g. after we've
156
+ persisted it).
157
+
158
+ Note: this will cause the cache entry to drop any stored state.
159
+ """
160
+
161
+ self.state_group = state_group
162
+
163
+ # We clear out the state as we know longer need to explicitly keep it in
164
+ # the `state_cache` (as the store state group cache will do that).
165
+ self._state = None
166
+
167
+ def __len__(self) -> int:
168
+ # The len should be used to estimate how large this cache entry is, for
169
+ # cache eviction purposes. This is why it's fine to return 1 if we're
170
+ # not storing any state.
171
+
172
+ length = 0
173
+
174
+ if self._state:
175
+ length += len(self._state)
176
+
177
+ if self.delta_ids:
178
+ length += len(self.delta_ids)
179
+
180
+ return length or 1 # Make sure its not 0.
181
+
182
+
183
+ class StateHandler:
184
+ """Fetches bits of state from the stores, and does state resolution
185
+ where necessary
186
+ """
187
+
188
+ def __init__(self, hs: "HomeServer"):
189
+ self.server_name = hs.hostname # nb must be called this for @measure_func
190
+ self.clock = hs.get_clock() # nb must be called this for @measure_func
191
+ self.store = hs.get_datastores().main
192
+ self._state_storage_controller = hs.get_storage_controllers().state
193
+ self.hs = hs
194
+ self._state_resolution_handler = hs.get_state_resolution_handler()
195
+ self._storage_controllers = hs.get_storage_controllers()
196
+ self._events_shard_config = hs.config.worker.events_shard_config
197
+ self._instance_name = hs.get_instance_name()
198
+ self._state_store = hs.get_datastores().state
199
+ self._state_deletion_store = hs.get_datastores().state_deletion
200
+
201
+ self._update_current_state_client = (
202
+ ReplicationUpdateCurrentStateRestServlet.make_client(hs)
203
+ )
204
+
205
+ async def compute_state_after_events(
206
+ self,
207
+ room_id: str,
208
+ event_ids: StrCollection,
209
+ state_filter: StateFilter | None = None,
210
+ await_full_state: bool = True,
211
+ ) -> StateMap[str]:
212
+ """Fetch the state after each of the given event IDs. Resolve them and return.
213
+
214
+ This is typically used where `event_ids` is a collection of forward extremities
215
+ in a room, intended to become the `prev_events` of a new event E. If so, the
216
+ return value of this function represents the state before E.
217
+
218
+ Args:
219
+ room_id: the room_id containing the given events.
220
+ event_ids: the events whose state should be fetched and resolved.
221
+ await_full_state: if `True`, will block if we do not yet have complete state
222
+ at these events and `state_filter` is not satisfied by partial state.
223
+ Defaults to `True`.
224
+
225
+ Returns:
226
+ the state dict (a mapping from (event_type, state_key) -> event_id) which
227
+ holds the resolution of the states after the given event IDs.
228
+ """
229
+ logger.debug("calling resolve_state_groups from compute_state_after_events")
230
+ if (
231
+ await_full_state
232
+ and state_filter
233
+ and not state_filter.must_await_full_state(self.hs.is_mine_id)
234
+ ):
235
+ await_full_state = False
236
+ ret = await self.resolve_state_groups_for_events(
237
+ room_id, event_ids, await_full_state
238
+ )
239
+ return await ret.get_state(self._state_storage_controller, state_filter)
240
+
241
+ async def get_current_user_ids_in_room(
242
+ self, room_id: str, latest_event_ids: StrCollection
243
+ ) -> set[str]:
244
+ """
245
+ Get the users IDs who are currently in a room.
246
+
247
+ Note: This is much slower than using the equivalent method
248
+ `DataStore.get_users_in_room` or `DataStore.get_users_in_room_with_profiles`,
249
+ so this should only be used when wanting the users at a particular point
250
+ in the room.
251
+
252
+ Args:
253
+ room_id: The ID of the room.
254
+ latest_event_ids: Precomputed list of latest event IDs. Will be computed if None.
255
+ Returns:
256
+ Set of user IDs in the room.
257
+ """
258
+
259
+ assert latest_event_ids is not None
260
+
261
+ logger.debug("calling resolve_state_groups from get_current_user_ids_in_room")
262
+ entry = await self.resolve_state_groups_for_events(room_id, latest_event_ids)
263
+ state = await entry.get_state(self._state_storage_controller, StateFilter.all())
264
+ return await self.store.get_joined_user_ids_from_state(room_id, state)
265
+
266
+ async def get_hosts_in_room_at_events(
267
+ self, room_id: str, event_ids: StrCollection
268
+ ) -> frozenset[str]:
269
+ """Get the hosts that were in a room at the given event ids
270
+
271
+ Args:
272
+ room_id:
273
+ event_ids:
274
+
275
+ Returns:
276
+ The hosts in the room at the given events
277
+ """
278
+ entry = await self.resolve_state_groups_for_events(room_id, event_ids)
279
+ return await self._state_storage_controller.get_joined_hosts(room_id, entry)
280
+
281
+ @trace
282
+ @tag_args
283
+ async def calculate_context_info(
284
+ self,
285
+ event: EventBase,
286
+ state_ids_before_event: StateMap[str] | None = None,
287
+ partial_state: bool | None = None,
288
+ state_group_before_event: int | None = None,
289
+ ) -> UnpersistedEventContextBase:
290
+ """
291
+ Calulates the contents of an unpersisted event context, other than the current
292
+ state group (which is either provided or calculated when the event context is persisted)
293
+
294
+ state_ids_before_event:
295
+ The event ids of the full state before the event if
296
+ it can't be calculated from existing events. This is normally
297
+ only specified when receiving an event from federation where we
298
+ don't have the prev events, e.g. when backfilling or when the event
299
+ is being created for batch persisting.
300
+ partial_state:
301
+ `True` if `state_ids_before_event` is partial and omits non-critical
302
+ membership events.
303
+ `False` if `state_ids_before_event` is the full state.
304
+ `None` when `state_ids_before_event` is not provided. In this case, the
305
+ flag will be calculated based on `event`'s prev events.
306
+ state_group_before_event:
307
+ the current state group at the time of event, if known
308
+ Returns:
309
+ The event context.
310
+
311
+ Raises:
312
+ RuntimeError if `state_ids_before_event` is not provided and one or more
313
+ prev events are missing or outliers.
314
+ """
315
+ assert not event.internal_metadata.is_outlier()
316
+
317
+ #
318
+ # first of all, figure out the state before the event, unless we
319
+ # already have it.
320
+ #
321
+ if state_ids_before_event:
322
+ # if we're given the state before the event, then we use that
323
+ state_group_before_event_prev_group = None
324
+ deltas_to_state_group_before_event = None
325
+
326
+ # the partial_state flag must be provided
327
+ assert partial_state is not None
328
+ else:
329
+ # otherwise, we'll need to resolve the state across the prev_events.
330
+
331
+ # partial_state should not be set explicitly in this case:
332
+ # we work it out dynamically
333
+ assert partial_state is None
334
+
335
+ # if any of the prev-events have partial state, so do we.
336
+ # (This is slightly racy - the prev-events might get fixed up before we use
337
+ # their states - but I don't think that really matters; it just means we
338
+ # might redundantly recalculate the state for this event later.)
339
+ prev_event_ids = event.prev_event_ids()
340
+ incomplete_prev_events = await self.store.get_partial_state_events(
341
+ prev_event_ids
342
+ )
343
+ partial_state = any(incomplete_prev_events.values())
344
+ if partial_state:
345
+ logger.debug(
346
+ "New/incoming event %s refers to prev_events %s with partial state",
347
+ event.event_id,
348
+ [k for (k, v) in incomplete_prev_events.items() if v],
349
+ )
350
+
351
+ logger.debug("calling resolve_state_groups from compute_event_context")
352
+ # we've already taken into account partial state, so no need to wait for
353
+ # complete state here.
354
+
355
+ entry = await self.resolve_state_groups_for_events(
356
+ event.room_id,
357
+ event.prev_event_ids(),
358
+ await_full_state=False,
359
+ )
360
+
361
+ # Ensure we still have the state groups we're relying on, and bump
362
+ # their usage time to avoid them being deleted from under us.
363
+ if entry.state_group:
364
+ missing_state_group = await self._state_deletion_store.check_state_groups_and_bump_deletion(
365
+ {entry.state_group}
366
+ )
367
+ if missing_state_group:
368
+ raise Exception(f"Missing state group: {entry.state_group}")
369
+ elif entry.prev_group:
370
+ # We only rely on the prev group when persisting the event if we
371
+ # don't have an `entry.state_group`.
372
+ missing_state_group = await self._state_deletion_store.check_state_groups_and_bump_deletion(
373
+ {entry.prev_group}
374
+ )
375
+
376
+ if missing_state_group:
377
+ # If we're missing the prev group then we can just clear the
378
+ # entries, and rely on `entry._state` (which must exist if
379
+ # `entry.state_group` is None)
380
+ entry.prev_group = None
381
+ entry.delta_ids = None
382
+
383
+ state_group_before_event_prev_group = entry.prev_group
384
+ deltas_to_state_group_before_event = entry.delta_ids
385
+ state_ids_before_event = None
386
+
387
+ # We make sure that we have a state group assigned to the state.
388
+ if entry.state_group is None:
389
+ # store_state_group requires us to have either a previous state group
390
+ # (with deltas) or the complete state map. So, if we don't have a
391
+ # previous state group, load the complete state map now.
392
+ if state_group_before_event_prev_group is None:
393
+ state_ids_before_event = await entry.get_state(
394
+ self._state_storage_controller, StateFilter.all()
395
+ )
396
+
397
+ state_group_before_event = (
398
+ await self._state_storage_controller.store_state_group(
399
+ event.event_id,
400
+ event.room_id,
401
+ prev_group=state_group_before_event_prev_group,
402
+ delta_ids=deltas_to_state_group_before_event,
403
+ current_state_ids=state_ids_before_event,
404
+ )
405
+ )
406
+ entry.set_state_group(state_group_before_event)
407
+ else:
408
+ state_group_before_event = entry.state_group
409
+
410
+ #
411
+ # now if it's not a state event, we're done
412
+ #
413
+
414
+ if not event.is_state():
415
+ return UnpersistedEventContext(
416
+ storage=self._storage_controllers,
417
+ state_group_before_event=state_group_before_event,
418
+ state_group_after_event=state_group_before_event,
419
+ state_delta_due_to_event={},
420
+ prev_group_for_state_group_before_event=state_group_before_event_prev_group,
421
+ delta_ids_to_state_group_before_event=deltas_to_state_group_before_event,
422
+ partial_state=partial_state,
423
+ state_map_before_event=state_ids_before_event,
424
+ )
425
+
426
+ #
427
+ # otherwise, we'll need to set up creating a new state group for after the event
428
+ #
429
+
430
+ key = (event.type, event.state_key)
431
+
432
+ if state_ids_before_event is not None:
433
+ replaces = state_ids_before_event.get(key)
434
+ else:
435
+ replaces_state_map = await entry.get_state(
436
+ self._state_storage_controller, StateFilter.from_types([key])
437
+ )
438
+ replaces = replaces_state_map.get(key)
439
+
440
+ if replaces and replaces != event.event_id:
441
+ event.unsigned["replaces_state"] = replaces
442
+
443
+ delta_ids = {key: event.event_id}
444
+
445
+ return UnpersistedEventContext(
446
+ storage=self._storage_controllers,
447
+ state_group_before_event=state_group_before_event,
448
+ state_group_after_event=None,
449
+ state_delta_due_to_event=delta_ids,
450
+ prev_group_for_state_group_before_event=state_group_before_event_prev_group,
451
+ delta_ids_to_state_group_before_event=deltas_to_state_group_before_event,
452
+ partial_state=partial_state,
453
+ state_map_before_event=state_ids_before_event,
454
+ )
455
+
456
+ async def compute_event_context(
457
+ self,
458
+ event: EventBase,
459
+ state_ids_before_event: StateMap[str] | None = None,
460
+ partial_state: bool | None = None,
461
+ ) -> EventContext:
462
+ """Build an EventContext structure for a non-outlier event.
463
+
464
+ (for an outlier, call EventContext.for_outlier directly)
465
+
466
+ This works out what the current state should be for the event, and
467
+ generates a new state group if necessary.
468
+
469
+ Args:
470
+ event:
471
+ state_ids_before_event: The event ids of the state before the event if
472
+ it can't be calculated from existing events. This is normally
473
+ only specified when receiving an event from federation where we
474
+ don't have the prev events, e.g. when backfilling.
475
+ partial_state:
476
+ `True` if `state_ids_before_event` is partial and omits non-critical
477
+ membership events.
478
+ `False` if `state_ids_before_event` is the full state.
479
+ `None` when `state_ids_before_event` is not provided. In this case, the
480
+ flag will be calculated based on `event`'s prev events.
481
+ entry:
482
+ A state cache entry for the resolved state across the prev events. We may
483
+ have already calculated this, so if it's available pass it in
484
+ Returns:
485
+ The event context.
486
+
487
+ Raises:
488
+ RuntimeError if `state_ids_before_event` is not provided and one or more
489
+ prev events are missing or outliers.
490
+ """
491
+
492
+ unpersisted_context = await self.calculate_context_info(
493
+ event=event,
494
+ state_ids_before_event=state_ids_before_event,
495
+ partial_state=partial_state,
496
+ )
497
+
498
+ return await unpersisted_context.persist(event)
499
+
500
+ @trace
501
+ @measure_func()
502
+ async def resolve_state_groups_for_events(
503
+ self,
504
+ room_id: str,
505
+ event_ids: StrCollection,
506
+ await_full_state: bool = True,
507
+ ) -> _StateCacheEntry:
508
+ """Given a list of event_ids this method fetches the state at each
509
+ event, resolves conflicts between them and returns them.
510
+
511
+ Args:
512
+ room_id
513
+ event_ids
514
+ await_full_state: if true, will block if we do not yet have complete
515
+ state at these events.
516
+
517
+ Returns:
518
+ The resolved state
519
+
520
+ Raises:
521
+ RuntimeError if we don't have a state group for one or more of the events
522
+ (ie. they are outliers or unknown)
523
+ """
524
+ logger.debug("resolve_state_groups event_ids %s", event_ids)
525
+
526
+ state_groups = await self._state_storage_controller.get_state_group_for_events(
527
+ event_ids, await_full_state=await_full_state
528
+ )
529
+
530
+ state_group_ids = state_groups.values()
531
+
532
+ # check if each event has same state group id, if so there's no state to resolve
533
+ state_group_ids_set = set(state_group_ids)
534
+ if len(state_group_ids_set) == 1:
535
+ (state_group_id,) = state_group_ids_set
536
+ (
537
+ prev_group,
538
+ delta_ids,
539
+ ) = await self._state_storage_controller.get_state_group_delta(
540
+ state_group_id
541
+ )
542
+
543
+ return _StateCacheEntry(
544
+ state=None,
545
+ state_group=state_group_id,
546
+ prev_group=prev_group,
547
+ delta_ids=delta_ids,
548
+ )
549
+ elif len(state_group_ids_set) == 0:
550
+ return _StateCacheEntry(state={}, state_group=None)
551
+
552
+ room_version = await self.store.get_room_version_id(room_id)
553
+
554
+ state_to_resolve = await self._state_storage_controller.get_state_for_groups(
555
+ state_group_ids_set
556
+ )
557
+
558
+ result = await self._state_resolution_handler.resolve_state_groups(
559
+ room_id,
560
+ room_version,
561
+ state_to_resolve,
562
+ None,
563
+ state_res_store=StateResolutionStore(
564
+ self.store, self._state_deletion_store
565
+ ),
566
+ )
567
+ return result
568
+
569
+ async def update_current_state(self, room_id: str) -> None:
570
+ """Recalculates the current state for a room, and persists it.
571
+
572
+ Raises:
573
+ SynapseError(502): if all attempts to connect to the event persister worker
574
+ fail
575
+ """
576
+ writer_instance = self._events_shard_config.get_instance(room_id)
577
+ if writer_instance != self._instance_name:
578
+ await self._update_current_state_client(
579
+ instance_name=writer_instance,
580
+ room_id=room_id,
581
+ )
582
+ return
583
+
584
+ assert self._storage_controllers.persistence is not None
585
+ await self._storage_controllers.persistence.update_current_state(room_id)
586
+
587
+
588
+ @attr.s(slots=True, auto_attribs=True)
589
+ class _StateResMetrics:
590
+ """Keeps track of some usage metrics about state res."""
591
+
592
+ # System and User CPU time, in seconds
593
+ cpu_time: float = 0.0
594
+
595
+ # time spent on database transactions (excluding scheduling time). This roughly
596
+ # corresponds to the amount of work done on the db server, excluding event fetches.
597
+ db_time: float = 0.0
598
+
599
+ # number of events fetched from the db.
600
+ db_events: int = 0
601
+
602
+
603
+ _biggest_room_by_cpu_counter = Counter(
604
+ "synapse_state_res_cpu_for_biggest_room_seconds",
605
+ "CPU time spent performing state resolution for the single most expensive "
606
+ "room for state resolution",
607
+ labelnames=[SERVER_NAME_LABEL],
608
+ )
609
+ _biggest_room_by_db_counter = Counter(
610
+ "synapse_state_res_db_for_biggest_room_seconds",
611
+ "Database time spent performing state resolution for the single most "
612
+ "expensive room for state resolution",
613
+ labelnames=[SERVER_NAME_LABEL],
614
+ )
615
+
616
+ _cpu_times = Histogram(
617
+ "synapse_state_res_cpu_for_all_rooms_seconds",
618
+ "CPU time (utime+stime) spent computing a single state resolution",
619
+ labelnames=[SERVER_NAME_LABEL],
620
+ )
621
+ _db_times = Histogram(
622
+ "synapse_state_res_db_for_all_rooms_seconds",
623
+ "Database time spent computing a single state resolution",
624
+ labelnames=[SERVER_NAME_LABEL],
625
+ )
626
+
627
+
628
+ class StateResolutionHandler:
629
+ """Responsible for doing state conflict resolution.
630
+
631
+ Note that the storage layer depends on this handler, so all functions must
632
+ be storage-independent.
633
+ """
634
+
635
+ def __init__(self, hs: "HomeServer"):
636
+ self.server_name = hs.hostname
637
+ self.clock = hs.get_clock()
638
+
639
+ self.resolve_linearizer = Linearizer(
640
+ name="state_resolve_lock", clock=self.clock
641
+ )
642
+
643
+ # dict of set of event_ids -> _StateCacheEntry.
644
+ self._state_cache: ExpiringCache[frozenset[int], _StateCacheEntry] = (
645
+ ExpiringCache(
646
+ cache_name="state_cache",
647
+ server_name=self.server_name,
648
+ hs=hs,
649
+ clock=self.clock,
650
+ max_len=100000,
651
+ expiry_ms=EVICTION_TIMEOUT_SECONDS * 1000,
652
+ iterable=True,
653
+ reset_expiry_on_get=True,
654
+ )
655
+ )
656
+
657
+ #
658
+ # stuff for tracking time spent on state-res by room
659
+ #
660
+
661
+ # tracks the amount of work done on state res per room
662
+ self._state_res_metrics: defaultdict[str, _StateResMetrics] = defaultdict(
663
+ _StateResMetrics
664
+ )
665
+
666
+ self.clock.looping_call(self._report_metrics, 120 * 1000)
667
+
668
+ async def resolve_state_groups(
669
+ self,
670
+ room_id: str,
671
+ room_version: str,
672
+ state_groups_ids: Mapping[int, StateMap[str]],
673
+ event_map: dict[str, EventBase] | None,
674
+ state_res_store: "StateResolutionStore",
675
+ ) -> _StateCacheEntry:
676
+ """Resolves conflicts between a set of state groups
677
+
678
+ Always generates a new state group (unless we hit the cache), so should
679
+ not be called for a single state group
680
+
681
+ Args:
682
+ room_id: room we are resolving for (used for logging and sanity checks)
683
+ room_version: version of the room
684
+ state_groups_ids:
685
+ A map from state group id to the state in that state group
686
+ (where 'state' is a map from state key to event id)
687
+
688
+ event_map:
689
+ a dict from event_id to event, for any events that we happen to
690
+ have in flight (eg, those currently being persisted). This will be
691
+ used as a starting point for finding the state we need; any missing
692
+ events will be requested via state_res_store.
693
+
694
+ If None, all events will be fetched via state_res_store.
695
+
696
+ state_res_store
697
+
698
+ Returns:
699
+ The resolved state
700
+ """
701
+ group_names = frozenset(state_groups_ids.keys())
702
+
703
+ async with self.resolve_linearizer.queue(group_names):
704
+ cache = self._state_cache.get(group_names, None)
705
+ if cache:
706
+ # Check that the returned cache entry doesn't point to deleted
707
+ # state groups.
708
+ state_groups_to_check = set()
709
+ if cache.state_group is not None:
710
+ state_groups_to_check.add(cache.state_group)
711
+
712
+ if cache.prev_group is not None:
713
+ state_groups_to_check.add(cache.prev_group)
714
+
715
+ missing_state_groups = await state_res_store.state_deletion_store.check_state_groups_and_bump_deletion(
716
+ state_groups_to_check
717
+ )
718
+
719
+ if not missing_state_groups:
720
+ return cache
721
+ else:
722
+ # There are missing state groups, so let's remove the stale
723
+ # entry and continue as if it was a cache miss.
724
+ self._state_cache.pop(group_names, None)
725
+
726
+ logger.info(
727
+ "Resolving state for %s with groups %s",
728
+ room_id,
729
+ list(group_names),
730
+ )
731
+
732
+ # We double check that none of the state groups have been deleted.
733
+ # They shouldn't be as all these state groups should be referenced.
734
+ missing_state_groups = await state_res_store.state_deletion_store.check_state_groups_and_bump_deletion(
735
+ group_names
736
+ )
737
+ if missing_state_groups:
738
+ raise Exception(
739
+ f"State groups have been deleted: {shortstr(missing_state_groups)}"
740
+ )
741
+
742
+ state_groups_histogram.labels(
743
+ **{SERVER_NAME_LABEL: self.server_name}
744
+ ).observe(len(state_groups_ids))
745
+
746
+ new_state = await self.resolve_events_with_store(
747
+ room_id,
748
+ room_version,
749
+ list(state_groups_ids.values()),
750
+ event_map=event_map,
751
+ state_res_store=state_res_store,
752
+ )
753
+
754
+ # if the new state matches any of the input state groups, we can
755
+ # use that state group again. Otherwise we will generate a state_id
756
+ # which will be used as a cache key for future resolutions, but
757
+ # not get persisted.
758
+
759
+ with Measure(
760
+ self.clock, name="state.create_group_ids", server_name=self.server_name
761
+ ):
762
+ cache = _make_state_cache_entry(new_state, state_groups_ids)
763
+
764
+ self._state_cache[group_names] = cache
765
+
766
+ return cache
767
+
768
+ async def resolve_events_with_store(
769
+ self,
770
+ room_id: str,
771
+ room_version: str,
772
+ state_sets: Sequence[StateMap[str]],
773
+ event_map: dict[str, EventBase] | None,
774
+ state_res_store: "StateResolutionStore",
775
+ ) -> StateMap[str]:
776
+ """
777
+ Args:
778
+ room_id: the room we are working in
779
+
780
+ room_version: Version of the room
781
+
782
+ state_sets: List of dicts of (type, state_key) -> event_id,
783
+ which are the different state groups to resolve.
784
+
785
+ event_map:
786
+ a dict from event_id to event, for any events that we happen to
787
+ have in flight (eg, those currently being persisted). This will be
788
+ used as a starting point for finding the state we need; any missing
789
+ events will be requested via state_map_factory.
790
+
791
+ If None, all events will be fetched via state_res_store.
792
+
793
+ state_res_store: a place to fetch events from
794
+
795
+ Returns:
796
+ a map from (type, state_key) to event_id.
797
+ """
798
+ try:
799
+ with Measure(
800
+ self.clock, name="state._resolve_events", server_name=self.server_name
801
+ ) as m:
802
+ room_version_obj = KNOWN_ROOM_VERSIONS[room_version]
803
+ if room_version_obj.state_res == StateResolutionVersions.V1:
804
+ return await v1.resolve_events_with_store(
805
+ room_id,
806
+ room_version_obj,
807
+ state_sets,
808
+ event_map,
809
+ state_res_store.get_events,
810
+ )
811
+ else:
812
+ return await v2.resolve_events_with_store(
813
+ self.clock,
814
+ room_id,
815
+ room_version_obj,
816
+ state_sets,
817
+ event_map,
818
+ state_res_store,
819
+ )
820
+ finally:
821
+ self._record_state_res_metrics(room_id, m.get_resource_usage())
822
+
823
+ def _record_state_res_metrics(
824
+ self, room_id: str, rusage: ContextResourceUsage
825
+ ) -> None:
826
+ room_metrics = self._state_res_metrics[room_id]
827
+ room_metrics.cpu_time += rusage.ru_utime + rusage.ru_stime
828
+ room_metrics.db_time += rusage.db_txn_duration_sec
829
+ room_metrics.db_events += rusage.evt_db_fetch_count
830
+
831
+ _cpu_times.labels(**{SERVER_NAME_LABEL: self.server_name}).observe(
832
+ rusage.ru_utime + rusage.ru_stime
833
+ )
834
+ _db_times.labels(**{SERVER_NAME_LABEL: self.server_name}).observe(
835
+ rusage.db_txn_duration_sec
836
+ )
837
+
838
+ def _report_metrics(self) -> None:
839
+ if not self._state_res_metrics:
840
+ # no state res has happened since the last iteration: don't bother logging.
841
+ return
842
+
843
+ self._report_biggest(
844
+ lambda i: i.cpu_time,
845
+ "CPU time",
846
+ _biggest_room_by_cpu_counter,
847
+ )
848
+
849
+ self._report_biggest(
850
+ lambda i: i.db_time,
851
+ "DB time",
852
+ _biggest_room_by_db_counter,
853
+ )
854
+
855
+ self._state_res_metrics.clear()
856
+
857
+ def _report_biggest(
858
+ self,
859
+ extract_key: Callable[[_StateResMetrics], Any],
860
+ metric_name: str,
861
+ prometheus_counter_metric: Counter,
862
+ ) -> None:
863
+ """Report metrics on the biggest rooms for state res
864
+
865
+ Args:
866
+ extract_key: a callable which, given a _StateResMetrics, extracts a single
867
+ metric to sort by.
868
+ metric_name: the name of the metric we have extracted, for the log line
869
+ prometheus_counter_metric: a prometheus metric recording the sum of the
870
+ the extracted metric
871
+ """
872
+ n_to_log = 10
873
+ if not metrics_logger.isEnabledFor(logging.DEBUG):
874
+ # only need the most expensive if we don't have debug logging, which
875
+ # allows nlargest() to degrade to max()
876
+ n_to_log = 1
877
+
878
+ items = self._state_res_metrics.items()
879
+
880
+ # log the N biggest rooms
881
+ biggest: list[tuple[str, _StateResMetrics]] = heapq.nlargest(
882
+ n_to_log, items, key=lambda i: extract_key(i[1])
883
+ )
884
+ metrics_logger.debug(
885
+ "%i biggest rooms for state-res by %s: %s",
886
+ len(biggest),
887
+ metric_name,
888
+ ["%s (%gs)" % (r, extract_key(m)) for (r, m) in biggest],
889
+ )
890
+
891
+ # report info on the single biggest to prometheus
892
+ _, biggest_metrics = biggest[0]
893
+ prometheus_counter_metric.labels(**{SERVER_NAME_LABEL: self.server_name}).inc(
894
+ extract_key(biggest_metrics)
895
+ )
896
+
897
+
898
+ def _make_state_cache_entry(
899
+ new_state: StateMap[str], state_groups_ids: Mapping[int, StateMap[str]]
900
+ ) -> _StateCacheEntry:
901
+ """Given a resolved state, and a set of input state groups, pick one to base
902
+ a new state group on (if any), and return an appropriately-constructed
903
+ _StateCacheEntry.
904
+
905
+ Args:
906
+ new_state: resolved state map (mapping from (type, state_key) to event_id)
907
+
908
+ state_groups_ids:
909
+ map from state group id to the state in that state group (where
910
+ 'state' is a map from state key to event id)
911
+
912
+ Returns:
913
+ The cache entry.
914
+ """
915
+ # if the new state matches any of the input state groups, we can
916
+ # use that state group again. Otherwise we will generate a state_id
917
+ # which will be used as a cache key for future resolutions, but
918
+ # not get persisted.
919
+
920
+ # first look for exact matches
921
+ new_state_event_ids = set(new_state.values())
922
+ for sg, state in state_groups_ids.items():
923
+ if len(new_state_event_ids) != len(state):
924
+ continue
925
+
926
+ old_state_event_ids = set(state.values())
927
+ if new_state_event_ids == old_state_event_ids:
928
+ # got an exact match.
929
+ return _StateCacheEntry(state=None, state_group=sg)
930
+
931
+ # TODO: We want to create a state group for this set of events, to
932
+ # increase cache hits, but we need to make sure that it doesn't
933
+ # end up as a prev_group without being added to the database
934
+
935
+ # failing that, look for the closest match.
936
+ prev_group = None
937
+ delta_ids: StateMap[str] | None = None
938
+
939
+ for old_group, old_state in state_groups_ids.items():
940
+ if old_state.keys() - new_state.keys():
941
+ # Currently we don't support deltas that remove keys from the state
942
+ # map, so we have to ignore this group as a candidate to base the
943
+ # new group on.
944
+ continue
945
+
946
+ n_delta_ids = {k: v for k, v in new_state.items() if old_state.get(k) != v}
947
+ if not delta_ids or len(n_delta_ids) < len(delta_ids):
948
+ prev_group = old_group
949
+ delta_ids = n_delta_ids
950
+
951
+ if prev_group is not None:
952
+ # If we have a prev group and deltas then we can drop the new state from
953
+ # the cache (to reduce memory usage).
954
+ return _StateCacheEntry(
955
+ state=None, state_group=None, prev_group=prev_group, delta_ids=delta_ids
956
+ )
957
+ else:
958
+ return _StateCacheEntry(state=new_state, state_group=None)
959
+
960
+
961
+ @attr.s(slots=True, auto_attribs=True)
962
+ class StateResolutionStore:
963
+ """Interface that allows state resolution algorithms to access the database
964
+ in well defined way.
965
+ """
966
+
967
+ main_store: "DataStore"
968
+ state_deletion_store: "StateDeletionDataStore"
969
+
970
+ def get_events(
971
+ self, event_ids: StrCollection, allow_rejected: bool = False
972
+ ) -> Awaitable[dict[str, EventBase]]:
973
+ """Get events from the database
974
+
975
+ Args:
976
+ event_ids: The event_ids of the events to fetch
977
+ allow_rejected: If True return rejected events.
978
+
979
+ Returns:
980
+ An awaitable which resolves to a dict from event_id to event.
981
+ """
982
+
983
+ return self.main_store.get_events(
984
+ event_ids,
985
+ redact_behaviour=EventRedactBehaviour.as_is,
986
+ get_prev_content=False,
987
+ allow_rejected=allow_rejected,
988
+ )
989
+
990
+ def get_auth_chain_difference(
991
+ self,
992
+ room_id: str,
993
+ state_sets: list[set[str]],
994
+ conflicted_state: set[str] | None,
995
+ additional_backwards_reachable_conflicted_events: set[str] | None,
996
+ ) -> Awaitable[StateDifference]:
997
+ """ "Given sets of state events figure out the auth chain difference (as
998
+ per state res v2 algorithm).
999
+
1000
+ This is equivalent to fetching the full auth chain for each set of state
1001
+ and returning the events that don't appear in each and every auth
1002
+ chain.
1003
+
1004
+ If conflicted_state is not None, calculate and return the conflicted sub-graph as per
1005
+ state res v2.1. The event IDs in the conflicted state MUST be a subset of the event IDs in
1006
+ state_sets.
1007
+
1008
+ If additional_backwards_reachable_conflicted_events is set, the provided events are included
1009
+ when calculating the conflicted subgraph. This is primarily useful for calculating the
1010
+ subgraph across a combination of persisted and unpersisted events.
1011
+
1012
+ Returns:
1013
+ information on the auth chain difference, and also the conflicted subgraph if
1014
+ conflicted_state is not None
1015
+ """
1016
+
1017
+ return self.main_store.get_auth_chain_difference_extended(
1018
+ room_id,
1019
+ state_sets,
1020
+ conflicted_state,
1021
+ additional_backwards_reachable_conflicted_events,
1022
+ )