matrix-synapse 1.143.0rc2__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.
Files changed (1058) hide show
  1. matrix_synapse-1.143.0rc2.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.143.0rc2.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.143.0rc2.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.143.0rc2.dist-info/METADATA +385 -0
  5. matrix_synapse-1.143.0rc2.dist-info/RECORD +1058 -0
  6. matrix_synapse-1.143.0rc2.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.143.0rc2.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,1045 @@
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
+
22
+ import abc
23
+ import asyncio
24
+ import collections
25
+ import inspect
26
+ import itertools
27
+ import logging
28
+ import typing
29
+ from contextlib import asynccontextmanager
30
+ from typing import (
31
+ Any,
32
+ AsyncContextManager,
33
+ AsyncIterator,
34
+ Awaitable,
35
+ Callable,
36
+ Collection,
37
+ Coroutine,
38
+ Generator,
39
+ Generic,
40
+ Hashable,
41
+ Iterable,
42
+ Literal,
43
+ TypeVar,
44
+ overload,
45
+ )
46
+
47
+ import attr
48
+ from typing_extensions import Concatenate, ParamSpec, Unpack
49
+
50
+ from twisted.internet import defer
51
+ from twisted.internet.defer import CancelledError
52
+ from twisted.python.failure import Failure
53
+
54
+ from synapse.logging.context import (
55
+ PreserveLoggingContext,
56
+ make_deferred_yieldable,
57
+ run_coroutine_in_background,
58
+ run_in_background,
59
+ )
60
+ from synapse.util.clock import Clock
61
+
62
+ logger = logging.getLogger(__name__)
63
+
64
+ _T = TypeVar("_T")
65
+
66
+
67
+ class AbstractObservableDeferred(Generic[_T], metaclass=abc.ABCMeta):
68
+ """Abstract base class defining the consumer interface of ObservableDeferred"""
69
+
70
+ __slots__ = ()
71
+
72
+ @abc.abstractmethod
73
+ def observe(self) -> "defer.Deferred[_T]":
74
+ """Add a new observer for this ObservableDeferred
75
+
76
+ This returns a brand new deferred that is resolved when the underlying
77
+ deferred is resolved. Interacting with the returned deferred does not
78
+ effect the underlying deferred.
79
+
80
+ Note that the returned Deferred doesn't follow the Synapse logcontext rules -
81
+ you will probably want to `make_deferred_yieldable` it.
82
+ """
83
+ ...
84
+
85
+
86
+ class ObservableDeferred(Generic[_T], AbstractObservableDeferred[_T]):
87
+ """Wraps a deferred object so that we can add observer deferreds. These
88
+ observer deferreds do not affect the callback chain of the original
89
+ deferred.
90
+
91
+ If consumeErrors is true errors will be captured from the origin deferred.
92
+
93
+ Cancelling or otherwise resolving an observer will not affect the original
94
+ ObservableDeferred.
95
+
96
+ NB that it does not attempt to do anything with logcontexts; in general
97
+ you should probably make_deferred_yieldable the deferreds
98
+ returned by `observe`, and ensure that the original deferred runs its
99
+ callbacks in the sentinel logcontext.
100
+ """
101
+
102
+ __slots__ = ["_deferred", "_observers", "_result"]
103
+
104
+ _deferred: "defer.Deferred[_T]"
105
+ _observers: list["defer.Deferred[_T]"] | tuple[()]
106
+ _result: None | tuple[Literal[True], _T] | tuple[Literal[False], Failure]
107
+
108
+ def __init__(self, deferred: "defer.Deferred[_T]", consumeErrors: bool = False):
109
+ object.__setattr__(self, "_deferred", deferred)
110
+ object.__setattr__(self, "_result", None)
111
+ object.__setattr__(self, "_observers", [])
112
+
113
+ def callback(r: _T) -> _T:
114
+ object.__setattr__(self, "_result", (True, r))
115
+
116
+ # once we have set _result, no more entries will be added to _observers,
117
+ # so it's safe to replace it with the empty tuple.
118
+ observers = self._observers
119
+ object.__setattr__(self, "_observers", ())
120
+
121
+ for observer in observers:
122
+ try:
123
+ observer.callback(r)
124
+ except Exception as e:
125
+ logger.exception(
126
+ "%r threw an exception on .callback(%r), ignoring...",
127
+ observer,
128
+ r,
129
+ exc_info=e,
130
+ )
131
+ return r
132
+
133
+ def errback(f: Failure) -> Failure | None:
134
+ object.__setattr__(self, "_result", (False, f))
135
+
136
+ # once we have set _result, no more entries will be added to _observers,
137
+ # so it's safe to replace it with the empty tuple.
138
+ observers = self._observers
139
+ object.__setattr__(self, "_observers", ())
140
+
141
+ for observer in observers:
142
+ # This is a little bit of magic to correctly propagate stack
143
+ # traces when we `await` on one of the observer deferreds.
144
+ f.value.__failure__ = f
145
+ try:
146
+ observer.errback(f)
147
+ except Exception as e:
148
+ logger.exception(
149
+ "%r threw an exception on .errback(%r), ignoring...",
150
+ observer,
151
+ f,
152
+ exc_info=e,
153
+ )
154
+
155
+ if consumeErrors:
156
+ return None
157
+ else:
158
+ return f
159
+
160
+ deferred.addCallbacks(callback, errback)
161
+
162
+ def observe(self) -> "defer.Deferred[_T]":
163
+ """Observe the underlying deferred.
164
+
165
+ This returns a brand new deferred that is resolved when the underlying
166
+ deferred is resolved. Interacting with the returned deferred does not
167
+ effect the underlying deferred.
168
+ """
169
+ if not self._result:
170
+ assert isinstance(self._observers, list)
171
+ d: "defer.Deferred[_T]" = defer.Deferred()
172
+ self._observers.append(d)
173
+ return d
174
+ elif self._result[0]:
175
+ return defer.succeed(self._result[1])
176
+ else:
177
+ return defer.fail(self._result[1])
178
+
179
+ def observers(self) -> "Collection[defer.Deferred[_T]]":
180
+ return self._observers
181
+
182
+ def has_called(self) -> bool:
183
+ return self._result is not None
184
+
185
+ def has_succeeded(self) -> bool:
186
+ return self._result is not None and self._result[0] is True
187
+
188
+ def get_result(self) -> _T | Failure:
189
+ if self._result is None:
190
+ raise ValueError(f"{self!r} has no result yet")
191
+ return self._result[1]
192
+
193
+ def __getattr__(self, name: str) -> Any:
194
+ return getattr(self._deferred, name)
195
+
196
+ def __setattr__(self, name: str, value: Any) -> None:
197
+ setattr(self._deferred, name, value)
198
+
199
+ def __repr__(self) -> str:
200
+ return "<ObservableDeferred object at %s, result=%r, _deferred=%r>" % (
201
+ id(self),
202
+ self._result,
203
+ self._deferred,
204
+ )
205
+
206
+
207
+ T = TypeVar("T")
208
+
209
+
210
+ async def concurrently_execute(
211
+ func: Callable[[T], Any],
212
+ args: Iterable[T],
213
+ limit: int,
214
+ delay_cancellation: bool = False,
215
+ ) -> None:
216
+ """Executes the function with each argument concurrently while limiting
217
+ the number of concurrent executions.
218
+
219
+ Args:
220
+ func: Function to execute, should return a deferred or coroutine.
221
+ args: List of arguments to pass to func, each invocation of func
222
+ gets a single argument.
223
+ limit: Maximum number of conccurent executions.
224
+ delay_cancellation: Whether to delay cancellation until after the invocations
225
+ have finished.
226
+
227
+ Returns:
228
+ None, when all function invocations have finished. The return values
229
+ from those functions are discarded.
230
+ """
231
+ it = iter(args)
232
+
233
+ async def _concurrently_execute_inner(value: T) -> None:
234
+ try:
235
+ while True:
236
+ await maybe_awaitable(func(value))
237
+ value = next(it)
238
+ except StopIteration:
239
+ pass
240
+
241
+ # We use `itertools.islice` to handle the case where the number of args is
242
+ # less than the limit, avoiding needlessly spawning unnecessary background
243
+ # tasks.
244
+ if delay_cancellation:
245
+ await yieldable_gather_results_delaying_cancellation(
246
+ _concurrently_execute_inner,
247
+ (value for value in itertools.islice(it, limit)),
248
+ )
249
+ else:
250
+ await yieldable_gather_results(
251
+ _concurrently_execute_inner,
252
+ (value for value in itertools.islice(it, limit)),
253
+ )
254
+
255
+
256
+ P = ParamSpec("P")
257
+ R = TypeVar("R")
258
+
259
+
260
+ async def yieldable_gather_results(
261
+ func: Callable[Concatenate[T, P], Awaitable[R]],
262
+ iter: Iterable[T],
263
+ *args: P.args,
264
+ **kwargs: P.kwargs,
265
+ ) -> list[R]:
266
+ """Executes the function with each argument concurrently.
267
+
268
+ Args:
269
+ func: Function to execute that returns a Deferred
270
+ iter: An iterable that yields items that get passed as the first
271
+ argument to the function
272
+ *args: Arguments to be passed to each call to func
273
+ **kwargs: Keyword arguments to be passed to each call to func
274
+
275
+ Returns
276
+ A list containing the results of the function
277
+ """
278
+ try:
279
+ return await make_deferred_yieldable(
280
+ defer.gatherResults(
281
+ [run_in_background(func, item, *args, **kwargs) for item in iter],
282
+ consumeErrors=True,
283
+ )
284
+ )
285
+ except defer.FirstError as dfe:
286
+ # unwrap the error from defer.gatherResults.
287
+
288
+ # The raised exception's traceback only includes func() etc if
289
+ # the 'await' happens before the exception is thrown - ie if the failure
290
+ # happens *asynchronously* - otherwise Twisted throws away the traceback as it
291
+ # could be large.
292
+ #
293
+ # We could maybe reconstruct a fake traceback from Failure.frames. Or maybe
294
+ # we could throw Twisted into the fires of Mordor.
295
+
296
+ # suppress exception chaining, because the FirstError doesn't tell us anything
297
+ # very interesting.
298
+ assert isinstance(dfe.subFailure.value, BaseException)
299
+ raise dfe.subFailure.value from None
300
+
301
+
302
+ async def yieldable_gather_results_delaying_cancellation(
303
+ func: Callable[Concatenate[T, P], Awaitable[R]],
304
+ iter: Iterable[T],
305
+ *args: P.args,
306
+ **kwargs: P.kwargs,
307
+ ) -> list[R]:
308
+ """Executes the function with each argument concurrently.
309
+ Cancellation is delayed until after all the results have been gathered.
310
+
311
+ See `yieldable_gather_results`.
312
+
313
+ Args:
314
+ func: Function to execute that returns a Deferred
315
+ iter: An iterable that yields items that get passed as the first
316
+ argument to the function
317
+ *args: Arguments to be passed to each call to func
318
+ **kwargs: Keyword arguments to be passed to each call to func
319
+
320
+ Returns
321
+ A list containing the results of the function
322
+ """
323
+ try:
324
+ return await make_deferred_yieldable(
325
+ delay_cancellation(
326
+ defer.gatherResults(
327
+ [run_in_background(func, item, *args, **kwargs) for item in iter],
328
+ consumeErrors=True,
329
+ )
330
+ )
331
+ )
332
+ except defer.FirstError as dfe:
333
+ assert isinstance(dfe.subFailure.value, BaseException)
334
+ raise dfe.subFailure.value from None
335
+
336
+
337
+ T1 = TypeVar("T1")
338
+ T2 = TypeVar("T2")
339
+ T3 = TypeVar("T3")
340
+ T4 = TypeVar("T4")
341
+ T5 = TypeVar("T5")
342
+ T6 = TypeVar("T6")
343
+
344
+
345
+ @overload
346
+ def gather_results(
347
+ deferredList: tuple[()], consumeErrors: bool = ...
348
+ ) -> "defer.Deferred[tuple[()]]": ...
349
+
350
+
351
+ @overload
352
+ def gather_results(
353
+ deferredList: tuple["defer.Deferred[T1]"],
354
+ consumeErrors: bool = ...,
355
+ ) -> "defer.Deferred[tuple[T1]]": ...
356
+
357
+
358
+ @overload
359
+ def gather_results(
360
+ deferredList: tuple["defer.Deferred[T1]", "defer.Deferred[T2]"],
361
+ consumeErrors: bool = ...,
362
+ ) -> "defer.Deferred[tuple[T1, T2]]": ...
363
+
364
+
365
+ @overload
366
+ def gather_results(
367
+ deferredList: tuple[
368
+ "defer.Deferred[T1]", "defer.Deferred[T2]", "defer.Deferred[T3]"
369
+ ],
370
+ consumeErrors: bool = ...,
371
+ ) -> "defer.Deferred[tuple[T1, T2, T3]]": ...
372
+
373
+
374
+ @overload
375
+ def gather_results(
376
+ deferredList: tuple[
377
+ "defer.Deferred[T1]",
378
+ "defer.Deferred[T2]",
379
+ "defer.Deferred[T3]",
380
+ "defer.Deferred[T4]",
381
+ ],
382
+ consumeErrors: bool = ...,
383
+ ) -> "defer.Deferred[tuple[T1, T2, T3, T4]]": ...
384
+
385
+
386
+ def gather_results( # type: ignore[misc]
387
+ deferredList: tuple["defer.Deferred[T1]", ...],
388
+ consumeErrors: bool = False,
389
+ ) -> "defer.Deferred[tuple[T1, ...]]":
390
+ """Combines a tuple of `Deferred`s into a single `Deferred`.
391
+
392
+ Wraps `defer.gatherResults` to provide type annotations that support heterogenous
393
+ lists of `Deferred`s.
394
+ """
395
+ # The `type: ignore[misc]` above suppresses
396
+ # "Overloaded function implementation cannot produce return type of signature 1/2/3"
397
+ deferred = defer.gatherResults(deferredList, consumeErrors=consumeErrors)
398
+ return deferred.addCallback(tuple)
399
+
400
+
401
+ @overload
402
+ async def gather_optional_coroutines(
403
+ *coroutines: Unpack[tuple[Coroutine[Any, Any, T1] | None]],
404
+ ) -> tuple[T1 | None]: ...
405
+
406
+
407
+ @overload
408
+ async def gather_optional_coroutines(
409
+ *coroutines: Unpack[
410
+ tuple[
411
+ Coroutine[Any, Any, T1] | None,
412
+ Coroutine[Any, Any, T2] | None,
413
+ ]
414
+ ],
415
+ ) -> tuple[T1 | None, T2 | None]: ...
416
+
417
+
418
+ @overload
419
+ async def gather_optional_coroutines(
420
+ *coroutines: Unpack[
421
+ tuple[
422
+ Coroutine[Any, Any, T1] | None,
423
+ Coroutine[Any, Any, T2] | None,
424
+ Coroutine[Any, Any, T3] | None,
425
+ ]
426
+ ],
427
+ ) -> tuple[T1 | None, T2 | None, T3 | None]: ...
428
+
429
+
430
+ @overload
431
+ async def gather_optional_coroutines(
432
+ *coroutines: Unpack[
433
+ tuple[
434
+ Coroutine[Any, Any, T1] | None,
435
+ Coroutine[Any, Any, T2] | None,
436
+ Coroutine[Any, Any, T3] | None,
437
+ Coroutine[Any, Any, T4] | None,
438
+ ]
439
+ ],
440
+ ) -> tuple[T1 | None, T2 | None, T3 | None, T4 | None]: ...
441
+
442
+
443
+ @overload
444
+ async def gather_optional_coroutines(
445
+ *coroutines: Unpack[
446
+ tuple[
447
+ Coroutine[Any, Any, T1] | None,
448
+ Coroutine[Any, Any, T2] | None,
449
+ Coroutine[Any, Any, T3] | None,
450
+ Coroutine[Any, Any, T4] | None,
451
+ Coroutine[Any, Any, T5] | None,
452
+ ]
453
+ ],
454
+ ) -> tuple[T1 | None, T2 | None, T3 | None, T4 | None, T5 | None]: ...
455
+
456
+
457
+ @overload
458
+ async def gather_optional_coroutines(
459
+ *coroutines: Unpack[
460
+ tuple[
461
+ Coroutine[Any, Any, T1] | None,
462
+ Coroutine[Any, Any, T2] | None,
463
+ Coroutine[Any, Any, T3] | None,
464
+ Coroutine[Any, Any, T4] | None,
465
+ Coroutine[Any, Any, T5] | None,
466
+ Coroutine[Any, Any, T6] | None,
467
+ ]
468
+ ],
469
+ ) -> tuple[T1 | None, T2 | None, T3 | None, T4 | None, T5 | None, T6 | None]: ...
470
+
471
+
472
+ async def gather_optional_coroutines(
473
+ *coroutines: Unpack[tuple[Coroutine[Any, Any, T1] | None, ...]],
474
+ ) -> tuple[T1 | None, ...]:
475
+ """Helper function that allows waiting on multiple coroutines at once.
476
+
477
+ The return value is a tuple of the return values of the coroutines in order.
478
+
479
+ If a `None` is passed instead of a coroutine, it will be ignored and a None
480
+ is returned in the tuple.
481
+
482
+ Note: For typechecking we need to have an explicit overload for each
483
+ distinct number of coroutines passed in. If you see type problems, it's
484
+ likely because you're using many arguments and you need to add a new
485
+ overload above.
486
+ """
487
+
488
+ try:
489
+ results = await make_deferred_yieldable(
490
+ defer.gatherResults(
491
+ [
492
+ run_coroutine_in_background(coroutine)
493
+ for coroutine in coroutines
494
+ if coroutine is not None
495
+ ],
496
+ consumeErrors=True,
497
+ )
498
+ )
499
+
500
+ results_iter = iter(results)
501
+ return tuple(
502
+ next(results_iter) if coroutine is not None else None
503
+ for coroutine in coroutines
504
+ )
505
+ except defer.FirstError as dfe:
506
+ # unwrap the error from defer.gatherResults.
507
+
508
+ # The raised exception's traceback only includes func() etc if
509
+ # the 'await' happens before the exception is thrown - ie if the failure
510
+ # happens *asynchronously* - otherwise Twisted throws away the traceback as it
511
+ # could be large.
512
+ #
513
+ # We could maybe reconstruct a fake traceback from Failure.frames. Or maybe
514
+ # we could throw Twisted into the fires of Mordor.
515
+
516
+ # suppress exception chaining, because the FirstError doesn't tell us anything
517
+ # very interesting.
518
+ assert isinstance(dfe.subFailure.value, BaseException)
519
+ raise dfe.subFailure.value from None
520
+
521
+
522
+ @attr.s(slots=True, auto_attribs=True)
523
+ class _LinearizerEntry:
524
+ # The number of things executing.
525
+ count: int
526
+ # Deferreds for the things blocked from executing.
527
+ deferreds: typing.OrderedDict["defer.Deferred[None]", Literal[1]]
528
+
529
+
530
+ class Linearizer:
531
+ """Limits concurrent access to resources based on a key. Useful to ensure
532
+ only a few things happen at a time on a given resource.
533
+
534
+ Example:
535
+
536
+ async with limiter.queue("test_key"):
537
+ # do some work.
538
+
539
+ """
540
+
541
+ def __init__(
542
+ self,
543
+ name: str,
544
+ clock: Clock,
545
+ max_count: int = 1,
546
+ ):
547
+ """
548
+ Args:
549
+ name: TODO
550
+ max_count: The maximum number of concurrent accesses
551
+ clock: (ideally, the homeserver clock `hs.get_clock()`)
552
+ """
553
+ self.name = name
554
+ self.max_count = max_count
555
+ self._clock = clock
556
+
557
+ # key_to_defer is a map from the key to a _LinearizerEntry.
558
+ self.key_to_defer: dict[Hashable, _LinearizerEntry] = {}
559
+
560
+ def is_queued(self, key: Hashable) -> bool:
561
+ """Checks whether there is a process queued up waiting"""
562
+ entry = self.key_to_defer.get(key)
563
+ if not entry:
564
+ # No entry so nothing is waiting.
565
+ return False
566
+
567
+ # There are waiting deferreds only in the OrderedDict of deferreds is
568
+ # non-empty.
569
+ return bool(entry.deferreds)
570
+
571
+ def queue(self, key: Hashable) -> AsyncContextManager[None]:
572
+ @asynccontextmanager
573
+ async def _ctx_manager() -> AsyncIterator[None]:
574
+ entry = await self._acquire_lock(key)
575
+ try:
576
+ yield
577
+ finally:
578
+ self._release_lock(key, entry)
579
+
580
+ return _ctx_manager()
581
+
582
+ async def _acquire_lock(self, key: Hashable) -> _LinearizerEntry:
583
+ """Acquires a linearizer lock, waiting if necessary.
584
+
585
+ Returns once we have secured the lock.
586
+ """
587
+ entry = self.key_to_defer.setdefault(
588
+ key, _LinearizerEntry(0, collections.OrderedDict())
589
+ )
590
+
591
+ if entry.count < self.max_count:
592
+ # The number of things executing is less than the maximum.
593
+ logger.debug(
594
+ "Acquired uncontended linearizer lock %r for key %r", self.name, key
595
+ )
596
+ entry.count += 1
597
+ return entry
598
+
599
+ # Otherwise, the number of things executing is at the maximum and we have to
600
+ # add a deferred to the list of blocked items.
601
+ # When one of the things currently executing finishes it will callback
602
+ # this item so that it can continue executing.
603
+ logger.debug("Waiting to acquire linearizer lock %r for key %r", self.name, key)
604
+
605
+ new_defer: "defer.Deferred[None]" = make_deferred_yieldable(defer.Deferred())
606
+ entry.deferreds[new_defer] = 1
607
+
608
+ try:
609
+ await new_defer
610
+ except Exception as e:
611
+ logger.info("defer %r got err %r", new_defer, e)
612
+ if isinstance(e, CancelledError):
613
+ logger.debug(
614
+ "Cancelling wait for linearizer lock %r for key %r",
615
+ self.name,
616
+ key,
617
+ )
618
+ else:
619
+ logger.warning(
620
+ "Unexpected exception waiting for linearizer lock %r for key %r",
621
+ self.name,
622
+ key,
623
+ )
624
+
625
+ # we just have to take ourselves back out of the queue.
626
+ del entry.deferreds[new_defer]
627
+ raise
628
+
629
+ logger.debug("Acquired linearizer lock %r for key %r", self.name, key)
630
+ entry.count += 1
631
+
632
+ # if the code holding the lock completes synchronously, then it
633
+ # will recursively run the next claimant on the list. That can
634
+ # relatively rapidly lead to stack exhaustion. This is essentially
635
+ # the same problem as http://twistedmatrix.com/trac/ticket/9304.
636
+ #
637
+ # In order to break the cycle, we add a cheeky sleep(0) here to
638
+ # ensure that we fall back to the reactor between each iteration.
639
+ #
640
+ # This needs to happen while we hold the lock. We could put it on the
641
+ # exit path, but that would slow down the uncontended case.
642
+ try:
643
+ await self._clock.sleep(0)
644
+ except CancelledError:
645
+ self._release_lock(key, entry)
646
+ raise
647
+
648
+ return entry
649
+
650
+ def _release_lock(self, key: Hashable, entry: _LinearizerEntry) -> None:
651
+ """Releases a held linearizer lock."""
652
+ logger.debug("Releasing linearizer lock %r for key %r", self.name, key)
653
+
654
+ # We've finished executing so check if there are any things
655
+ # blocked waiting to execute and start one of them
656
+ entry.count -= 1
657
+
658
+ if entry.deferreds:
659
+ (next_def, _) = entry.deferreds.popitem(last=False)
660
+
661
+ # we need to run the next thing in the sentinel context.
662
+ with PreserveLoggingContext():
663
+ next_def.callback(None)
664
+ elif entry.count == 0:
665
+ # We were the last thing for this key: remove it from the
666
+ # map.
667
+ del self.key_to_defer[key]
668
+
669
+
670
+ class ReadWriteLock:
671
+ """An async read write lock.
672
+
673
+ Example:
674
+
675
+ async with read_write_lock.read("test_key"):
676
+ # do some work
677
+ """
678
+
679
+ # IMPLEMENTATION NOTES
680
+ #
681
+ # We track the most recent queued reader and writer deferreds (which get
682
+ # resolved when they release the lock).
683
+ #
684
+ # Read: We know its safe to acquire a read lock when the latest writer has
685
+ # been resolved. The new reader is appended to the list of latest readers.
686
+ #
687
+ # Write: We know its safe to acquire the write lock when both the latest
688
+ # writers and readers have been resolved. The new writer replaces the latest
689
+ # writer.
690
+
691
+ def __init__(self) -> None:
692
+ # Latest readers queued
693
+ self.key_to_current_readers: dict[str, set[defer.Deferred]] = {}
694
+
695
+ # Latest writer queued
696
+ self.key_to_current_writer: dict[str, defer.Deferred] = {}
697
+
698
+ def read(self, key: str) -> AsyncContextManager:
699
+ @asynccontextmanager
700
+ async def _ctx_manager() -> AsyncIterator[None]:
701
+ new_defer: "defer.Deferred[None]" = defer.Deferred()
702
+
703
+ curr_readers = self.key_to_current_readers.setdefault(key, set())
704
+ curr_writer = self.key_to_current_writer.get(key, None)
705
+
706
+ curr_readers.add(new_defer)
707
+
708
+ try:
709
+ # We wait for the latest writer to finish writing. We can safely ignore
710
+ # any existing readers... as they're readers.
711
+ # May raise a `CancelledError` if the `Deferred` wrapping us is
712
+ # cancelled. The `Deferred` we are waiting on must not be cancelled,
713
+ # since we do not own it.
714
+ if curr_writer:
715
+ await make_deferred_yieldable(stop_cancellation(curr_writer))
716
+ yield
717
+ finally:
718
+ with PreserveLoggingContext():
719
+ new_defer.callback(None)
720
+ self.key_to_current_readers.get(key, set()).discard(new_defer)
721
+
722
+ return _ctx_manager()
723
+
724
+ def write(self, key: str) -> AsyncContextManager:
725
+ @asynccontextmanager
726
+ async def _ctx_manager() -> AsyncIterator[None]:
727
+ new_defer: "defer.Deferred[None]" = defer.Deferred()
728
+
729
+ curr_readers = self.key_to_current_readers.get(key, set())
730
+ curr_writer = self.key_to_current_writer.get(key, None)
731
+
732
+ # We wait on all latest readers and writer.
733
+ to_wait_on = list(curr_readers)
734
+ if curr_writer:
735
+ to_wait_on.append(curr_writer)
736
+
737
+ # We can clear the list of current readers since `new_defer` waits
738
+ # for them to finish.
739
+ curr_readers.clear()
740
+ self.key_to_current_writer[key] = new_defer
741
+
742
+ to_wait_on_defer = defer.gatherResults(to_wait_on)
743
+ try:
744
+ # Wait for all current readers and the latest writer to finish.
745
+ # May raise a `CancelledError` immediately after the wait if the
746
+ # `Deferred` wrapping us is cancelled. We must only release the lock
747
+ # once we have acquired it, hence the use of `delay_cancellation`
748
+ # rather than `stop_cancellation`.
749
+ await make_deferred_yieldable(delay_cancellation(to_wait_on_defer))
750
+ yield
751
+ finally:
752
+ # Release the lock.
753
+ with PreserveLoggingContext():
754
+ new_defer.callback(None)
755
+ # `self.key_to_current_writer[key]` may be missing if there was another
756
+ # writer waiting for us and it completed entirely within the
757
+ # `new_defer.callback()` call above.
758
+ if self.key_to_current_writer.get(key) == new_defer:
759
+ self.key_to_current_writer.pop(key)
760
+
761
+ return _ctx_manager()
762
+
763
+
764
+ def timeout_deferred(
765
+ *,
766
+ deferred: "defer.Deferred[_T]",
767
+ timeout: float,
768
+ cancel_on_shutdown: bool = True,
769
+ clock: Clock,
770
+ ) -> "defer.Deferred[_T]":
771
+ """The in built twisted `Deferred.addTimeout` fails to time out deferreds
772
+ that have a canceller that throws exceptions. This method creates a new
773
+ deferred that wraps and times out the given deferred, correctly handling
774
+ the case where the given deferred's canceller throws.
775
+
776
+ (See https://twistedmatrix.com/trac/ticket/9534)
777
+
778
+ NOTE: Unlike `Deferred.addTimeout`, this function returns a new deferred.
779
+
780
+ NOTE: the TimeoutError raised by the resultant deferred is
781
+ twisted.internet.defer.TimeoutError, which is *different* to the built-in
782
+ TimeoutError, as well as various other TimeoutErrors you might have imported.
783
+
784
+ Args:
785
+ deferred: The Deferred to potentially timeout.
786
+ timeout: Timeout in seconds
787
+ cancel_on_shutdown: Whether this call should be tracked for cleanup during
788
+ shutdown. In general, all calls should be tracked. There may be a use case
789
+ not to track calls with a `timeout` of 0 (or similarly short) since tracking
790
+ them may result in rapid insertions and removals of tracked calls
791
+ unnecessarily. But unless a specific instance of tracking proves to be an
792
+ issue, we can just track all delayed calls.
793
+ clock: The `Clock` instance used to track delayed calls.
794
+
795
+
796
+ Returns:
797
+ A new Deferred, which will errback with defer.TimeoutError on timeout.
798
+ """
799
+ new_d: "defer.Deferred[_T]" = defer.Deferred()
800
+
801
+ timed_out = [False]
802
+
803
+ def time_it_out() -> None:
804
+ timed_out[0] = True
805
+
806
+ try:
807
+ with PreserveLoggingContext():
808
+ deferred.cancel()
809
+ except Exception: # if we throw any exception it'll break time outs
810
+ logger.exception("Canceller failed during timeout")
811
+
812
+ # the cancel() call should have set off a chain of errbacks which
813
+ # will have errbacked new_d, but in case it hasn't, errback it now.
814
+
815
+ if not new_d.called:
816
+ with PreserveLoggingContext():
817
+ new_d.errback(defer.TimeoutError("Timed out after %gs" % (timeout,)))
818
+
819
+ # We don't track these calls since they are short.
820
+ delayed_call = clock.call_later(
821
+ timeout, time_it_out, call_later_cancel_on_shutdown=cancel_on_shutdown
822
+ )
823
+
824
+ def convert_cancelled(value: Failure) -> Failure:
825
+ # if the original deferred was cancelled, and our timeout has fired, then
826
+ # the reason it was cancelled was due to our timeout. Turn the CancelledError
827
+ # into a TimeoutError.
828
+ if timed_out[0] and value.check(CancelledError):
829
+ raise defer.TimeoutError("Timed out after %gs" % (timeout,))
830
+ return value
831
+
832
+ deferred.addErrback(convert_cancelled)
833
+
834
+ def cancel_timeout(result: _T) -> _T:
835
+ # stop the pending call to cancel the deferred if it's been fired
836
+ if delayed_call.active():
837
+ delayed_call.cancel()
838
+ return result
839
+
840
+ deferred.addBoth(cancel_timeout)
841
+
842
+ def success_cb(val: _T) -> None:
843
+ if not new_d.called:
844
+ with PreserveLoggingContext():
845
+ new_d.callback(val)
846
+
847
+ def failure_cb(val: Failure) -> None:
848
+ if not new_d.called:
849
+ with PreserveLoggingContext():
850
+ new_d.errback(val)
851
+
852
+ deferred.addCallbacks(success_cb, failure_cb)
853
+
854
+ return new_d
855
+
856
+
857
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
858
+ class DoneAwaitable(Awaitable[R]):
859
+ """Simple awaitable that returns the provided value."""
860
+
861
+ value: R
862
+
863
+ def __await__(self) -> Generator[Any, None, R]:
864
+ yield None
865
+ return self.value
866
+
867
+
868
+ def maybe_awaitable(value: Awaitable[R] | R) -> Awaitable[R]:
869
+ """Convert a value to an awaitable if not already an awaitable."""
870
+ if inspect.isawaitable(value):
871
+ return value
872
+
873
+ # For some reason mypy doesn't deduce that value is not Awaitable here, even though
874
+ # inspect.isawaitable returns a TypeGuard.
875
+ assert not isinstance(value, Awaitable)
876
+ return DoneAwaitable(value)
877
+
878
+
879
+ def stop_cancellation(deferred: "defer.Deferred[T]") -> "defer.Deferred[T]":
880
+ """Prevent a `Deferred` from being cancelled by wrapping it in another `Deferred`.
881
+
882
+ Args:
883
+ deferred: The `Deferred` to protect against cancellation. Must not follow the
884
+ Synapse logcontext rules.
885
+
886
+ Returns:
887
+ A new `Deferred`, which will contain the result of the original `Deferred`.
888
+ The new `Deferred` will not propagate cancellation through to the original.
889
+ When cancelled, the new `Deferred` will fail with a `CancelledError`.
890
+
891
+ The new `Deferred` will not follow the Synapse logcontext rules and should be
892
+ wrapped with `make_deferred_yieldable`.
893
+ """
894
+ new_deferred: "defer.Deferred[T]" = defer.Deferred()
895
+ deferred.chainDeferred(new_deferred)
896
+ return new_deferred
897
+
898
+
899
+ @overload
900
+ def delay_cancellation(awaitable: "defer.Deferred[T]") -> "defer.Deferred[T]": ...
901
+
902
+
903
+ @overload
904
+ def delay_cancellation(awaitable: Coroutine[Any, Any, T]) -> "defer.Deferred[T]": ...
905
+
906
+
907
+ @overload
908
+ def delay_cancellation(awaitable: Awaitable[T]) -> Awaitable[T]: ...
909
+
910
+
911
+ def delay_cancellation(awaitable: Awaitable[T]) -> Awaitable[T]:
912
+ """Delay cancellation of a coroutine or `Deferred` awaitable until it resolves.
913
+
914
+ Has the same effect as `stop_cancellation`, but the returned `Deferred` will not
915
+ resolve with a `CancelledError` until the original awaitable resolves.
916
+
917
+ Args:
918
+ deferred: The coroutine or `Deferred` to protect against cancellation. May
919
+ optionally follow the Synapse logcontext rules.
920
+
921
+ Returns:
922
+ A new `Deferred`, which will contain the result of the original coroutine or
923
+ `Deferred`. The new `Deferred` will not propagate cancellation through to the
924
+ original coroutine or `Deferred`.
925
+
926
+ When cancelled, the new `Deferred` will wait until the original coroutine or
927
+ `Deferred` resolves before failing with a `CancelledError`.
928
+
929
+ The new `Deferred` will follow the Synapse logcontext rules if `awaitable`
930
+ follows the Synapse logcontext rules. Otherwise the new `Deferred` should be
931
+ wrapped with `make_deferred_yieldable`.
932
+ """
933
+
934
+ # First, convert the awaitable into a `Deferred`.
935
+ if isinstance(awaitable, defer.Deferred):
936
+ deferred = awaitable
937
+ elif asyncio.iscoroutine(awaitable):
938
+ # Ideally we'd use `Deferred.fromCoroutine()` here, to save on redundant
939
+ # type-checking, but we'd need Twisted >= 21.2.
940
+ deferred = defer.ensureDeferred(awaitable)
941
+ else:
942
+ # We have no idea what to do with this awaitable.
943
+ # We assume it's already resolved, such as `DoneAwaitable`s or `Future`s from
944
+ # `make_awaitable`, and let the caller `await` it normally.
945
+ return awaitable
946
+
947
+ def handle_cancel(new_deferred: "defer.Deferred[T]") -> None:
948
+ # before the new deferred is cancelled, we `pause` it to stop the cancellation
949
+ # propagating. we then `unpause` it once the wrapped deferred completes, to
950
+ # propagate the exception.
951
+ new_deferred.pause()
952
+ with PreserveLoggingContext():
953
+ new_deferred.errback(Failure(CancelledError()))
954
+
955
+ deferred.addBoth(lambda _: new_deferred.unpause())
956
+
957
+ new_deferred: "defer.Deferred[T]" = defer.Deferred(handle_cancel)
958
+ deferred.chainDeferred(new_deferred)
959
+ return new_deferred
960
+
961
+
962
+ class AwakenableSleeper:
963
+ """Allows explicitly waking up deferreds related to an entity that are
964
+ currently sleeping.
965
+ """
966
+
967
+ def __init__(self, clock: Clock) -> None:
968
+ self._streams: dict[str, set[defer.Deferred[None]]] = {}
969
+ self._clock = clock
970
+
971
+ def wake(self, name: str) -> None:
972
+ """Wake everything related to `name` that is currently sleeping."""
973
+ stream_set = self._streams.pop(name, set())
974
+ for deferred in stream_set:
975
+ try:
976
+ with PreserveLoggingContext():
977
+ deferred.callback(None)
978
+ except Exception:
979
+ pass
980
+
981
+ async def sleep(self, name: str, delay_ms: int) -> None:
982
+ """Sleep for the given number of milliseconds, or return if the given
983
+ `name` is explicitly woken up.
984
+ """
985
+ # Create a deferred that will get called if `wake` is called with
986
+ # the same `name`.
987
+ stream_set = self._streams.setdefault(name, set())
988
+ notify_deferred: "defer.Deferred[None]" = defer.Deferred()
989
+ stream_set.add(notify_deferred)
990
+
991
+ try:
992
+ # Wait for either the delay or for `wake` to be called.
993
+ await make_deferred_yieldable(
994
+ timeout_deferred(
995
+ deferred=stop_cancellation(notify_deferred),
996
+ timeout=delay_ms / 1000,
997
+ clock=self._clock,
998
+ )
999
+ )
1000
+ except defer.TimeoutError:
1001
+ pass
1002
+ finally:
1003
+ # Clean up the state
1004
+ curr_stream_set = self._streams.get(name)
1005
+ if curr_stream_set is not None:
1006
+ curr_stream_set.discard(notify_deferred)
1007
+ if len(curr_stream_set) == 0:
1008
+ self._streams.pop(name)
1009
+
1010
+
1011
+ class DeferredEvent:
1012
+ """Like threading.Event but for async code"""
1013
+
1014
+ def __init__(self, clock: Clock) -> None:
1015
+ self._clock = clock
1016
+ self._deferred: "defer.Deferred[None]" = defer.Deferred()
1017
+
1018
+ def set(self) -> None:
1019
+ if not self._deferred.called:
1020
+ with PreserveLoggingContext():
1021
+ self._deferred.callback(None)
1022
+
1023
+ def clear(self) -> None:
1024
+ if self._deferred.called:
1025
+ self._deferred = defer.Deferred()
1026
+
1027
+ def is_set(self) -> bool:
1028
+ return self._deferred.called
1029
+
1030
+ async def wait(self, timeout_seconds: float) -> bool:
1031
+ if self.is_set():
1032
+ return True
1033
+
1034
+ try:
1035
+ await make_deferred_yieldable(
1036
+ timeout_deferred(
1037
+ deferred=stop_cancellation(self._deferred),
1038
+ timeout=timeout_seconds,
1039
+ clock=self._clock,
1040
+ )
1041
+ )
1042
+ except defer.TimeoutError:
1043
+ pass
1044
+
1045
+ return self.is_set()