diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2023-05-02 09:29:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-02 09:29:40 -0400 |
commit | 6aca4e7cb8818a6d0928108f5e25a6b582842a7d (patch) | |
tree | 7e60358c09b5b3cbffa2348c278e727a9883eb9c /synapse/server.py | |
parent | Initial implementation of MSC3981: recursive relations API (#15315) (diff) | |
download | synapse-6aca4e7cb8818a6d0928108f5e25a6b582842a7d.tar.xz |
Reduce the size of the HTTP connection pool for non-pushers. (#15514)
Pushers tend to make many connections to the same HTTP host (e.g. a new event comes in, causes events to be pushed, and then the homeserver connects to the same host many times). Due to this the per-host HTTP connection pool size was increased, but this does not make sense for other SimpleHttpClients. Add a parameter for the connection pool and override it for pushers (making a separate SimpleHttpClient for pushers with the increased configuration). This returns the HTTP connection pool settings to the default Twisted ones for non-pusher HTTP clients.
Diffstat (limited to 'synapse/server.py')
-rw-r--r-- | synapse/server.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/synapse/server.py b/synapse/server.py index 08ad97b952..75a902d64d 100644 --- a/synapse/server.py +++ b/synapse/server.py @@ -27,6 +27,7 @@ from typing_extensions import TypeAlias from twisted.internet.interfaces import IOpenSSLContextFactory from twisted.internet.tcp import Port +from twisted.web.client import HTTPConnectionPool from twisted.web.iweb import IPolicyForHTTPS from twisted.web.resource import Resource @@ -454,6 +455,26 @@ class HomeServer(metaclass=abc.ABCMeta): ) @cache_in_self + def get_pusher_http_client(self) -> SimpleHttpClient: + # the pusher makes lots of concurrent SSL connections to Sygnal, and tends to + # do so in batches, so we need to allow the pool to keep lots of idle + # connections around. + pool = HTTPConnectionPool(self.get_reactor()) + # XXX: The justification for using the cache factor here is that larger + # instances will need both more cache and more connections. + # Still, this should probably be a separate dial + pool.maxPersistentPerHost = max(int(100 * self.config.caches.global_factor), 5) + pool.cachedConnectionTimeout = 2 * 60 + + return SimpleHttpClient( + self, + ip_whitelist=self.config.server.ip_range_whitelist, + ip_blacklist=self.config.server.ip_range_blacklist, + use_proxy=True, + connection_pool=pool, + ) + + @cache_in_self def get_federation_http_client(self) -> MatrixFederationHttpClient: """ An HTTP client for federation. |