synapse/synapse
Erik Johnston 707d5e4e48
Encode JSON responses on a thread in C, mk2 (#10905)
Currently we use `JsonEncoder.iterencode` to write JSON responses, which ensures that we don't block the main reactor thread when encoding huge objects. The downside to this is that `iterencode` falls back to using a pure Python encoder that is *much* less efficient and can easily burn a lot of CPU for huge responses. To fix this, while still ensuring we don't block the reactor loop, we encode the JSON on a threadpool using the standard `JsonEncoder.encode` functions, which is backed by a C library.

Doing so, however, requires `respond_with_json` to have access to the reactor, which it previously didn't. There are two ways of doing this:

1. threading through the reactor object, which is a bit fiddly as e.g. `DirectServeJsonResource` doesn't currently take a reactor, but is exposed to modules and so is a PITA to change; or
2. expose the reactor in `SynapseRequest`, which requires updating a bunch of servlet types.

I went with the latter as that is just a mechanical change, and I think makes sense as a request already has a reactor associated with it (via its http channel).
2021-09-28 09:37:58 +00:00
..
_scripts Remove shebang line from module files (#10415) 2021-07-29 21:34:14 +01:00
api Fix AuthBlocking check when requester is appservice (#10881) 2021-09-24 10:41:18 +01:00
app Use direct references for configuration variables (part 5). (#10897) 2021-09-24 07:25:21 -04:00
appservice Use inline type hints in various other places (in synapse/) (#10380) 2021-07-15 11:02:43 +01:00
config Fix race conditions when creating media store and config directories (#10913) 2021-09-27 11:29:23 +01:00
crypto Use direct references for configuration variables (part 5). (#10897) 2021-09-24 07:25:21 -04:00
events Add a spamchecker callback to allow or deny room creation based on invites (#10898) 2021-09-24 16:38:23 +02:00
federation Factor out common code for persisting fetched auth events (#10896) 2021-09-24 11:56:33 +01:00
groups Use direct references for configuration variables (part 4). (#10893) 2021-09-23 12:03:01 -04:00
handlers Add a spamchecker callback to allow or deny room creation based on invites (#10898) 2021-09-24 16:38:23 +02:00
http Encode JSON responses on a thread in C, mk2 (#10905) 2021-09-28 09:37:58 +00:00
logging Use direct references for configuration variables (part 5). (#10897) 2021-09-24 07:25:21 -04:00
metrics [pyupgrade] synapse/ (#10348) 2021-07-19 15:28:05 +01:00
module_api Use direct references for some configuration variables (part 3) (#10885) 2021-09-23 07:13:34 -04:00
push Encode JSON responses on a thread in C, mk2 (#10905) 2021-09-28 09:37:58 +00:00
replication Use direct references for configuration variables (part 5). (#10897) 2021-09-24 07:25:21 -04:00
res Allow configuration of the oEmbed URLs. (#10714) 2021-08-31 18:37:07 -04:00
rest Avoid storing URL cache files in storage providers (#10911) 2021-09-27 12:55:27 +01:00
server_notices Use direct references for configuration variables (part 5). (#10897) 2021-09-24 07:25:21 -04:00
spam_checker_api Remove redundant "coding: utf-8" lines (#9786) 2021-04-14 15:34:27 +01:00
state Factor out a separate EventContext.for_outlier (#10883) 2021-09-22 17:58:57 +01:00
static Display an error page during failure of fallback UIA. (#10561) 2021-08-18 08:13:35 -04:00
storage Document changes to schema version 61 - 64 (#10917) 2021-09-24 17:09:12 -05:00
streams Remove unnecessary parentheses around tuples returned from methods (#10889) 2021-09-23 11:59:07 +01:00
util Encode JSON responses on a thread in C, mk2 (#10905) 2021-09-28 09:37:58 +00:00
__init__.py 1.43.0 2021-09-21 11:49:15 +01:00
event_auth.py Rename MSC2716 things from chunk to batch to match /batch_send endpoint (#10838) 2021-09-21 15:06:28 -05:00
notifier.py Add type hints for event streams. (#10856) 2021-09-21 13:34:26 -04:00
python_dependencies.py Validate new m.room.power_levels events (#10232) 2021-08-26 17:07:58 +01:00
server.py Use direct references for some configuration variables (part 2) (#10812) 2021-09-15 08:34:52 -04:00
types.py Remove unnecessary parentheses around tuples returned from methods (#10889) 2021-09-23 11:59:07 +01:00
visibility.py [pyupgrade] synapse/ (#10348) 2021-07-19 15:28:05 +01:00