Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 2d14b26

Browse files
tojamiesTuomas Ojamies
authored andcommitted
Refactor listener creation to reduce duplicated code
1 parent fdf76aa commit 2d14b26

File tree

3 files changed

+63
-65
lines changed

3 files changed

+63
-65
lines changed

synapse/app/_base.py

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
from twisted.logger import LoggingFile, LogLevel
4848
from twisted.protocols.tls import TLSMemoryBIOFactory
4949
from twisted.python.threadpool import ThreadPool
50+
from twisted.web.resource import Resource
5051

5152
import synapse.util.caches
5253
from synapse.api.constants import MAX_PDU_SIZE
@@ -55,12 +56,13 @@
5556
from synapse.config import ConfigError
5657
from synapse.config._base import format_config_error
5758
from synapse.config.homeserver import HomeServerConfig
58-
from synapse.config.server import ManholeConfig
59+
from synapse.config.server import ListenerConfig, ManholeConfig
5960
from synapse.crypto import context_factory
6061
from synapse.events.presence_router import load_legacy_presence_router
6162
from synapse.events.spamcheck import load_legacy_spam_checkers
6263
from synapse.events.third_party_rules import load_legacy_third_party_event_rules
6364
from synapse.handlers.auth import load_legacy_password_auth_providers
65+
from synapse.http.site import SynapseSite
6466
from synapse.logging.context import PreserveLoggingContext
6567
from synapse.logging.opentracing import init_tracer
6668
from synapse.metrics import install_gc_manager, register_threadpool
@@ -357,6 +359,58 @@ def listen_tcp(
357359
return r # type: ignore[return-value]
358360

359361

362+
def listen_http(
363+
listener_config: ListenerConfig,
364+
root_resource: Resource,
365+
version_string,
366+
max_request_body_size,
367+
context_factory: IOpenSSLContextFactory,
368+
reactor: IReactorSSL = reactor,
369+
):
370+
port = listener_config.port
371+
bind_addresses = listener_config.bind_addresses
372+
tls = listener_config.tls
373+
374+
assert listener_config.http_options is not None
375+
376+
site_tag = listener_config.http_options.tag
377+
if site_tag is None:
378+
site_tag = str(port)
379+
380+
site = SynapseSite(
381+
"synapse.access.%s.%s" % ("https" if tls else "http", site_tag),
382+
site_tag,
383+
listener_config,
384+
root_resource,
385+
version_string,
386+
max_request_body_size=max_request_body_size,
387+
reactor=reactor,
388+
)
389+
# This has same logic as synapse/app/homeserver.py where we choose between
390+
# listen_ssl and listen_tcp based on the tls configuration flag in listener
391+
# config.
392+
if tls:
393+
# refresh_certificate should have been called before this.
394+
assert context_factory is not None
395+
ports = listen_ssl(
396+
bind_addresses,
397+
port,
398+
site,
399+
context_factory,
400+
reactor=reactor,
401+
)
402+
logger.info("Synapse worker now listening on port %d (TLS)", port)
403+
else:
404+
ports = listen_tcp(
405+
bind_addresses,
406+
port,
407+
site,
408+
reactor=reactor,
409+
)
410+
logger.info("Synapse worker now listening on port %d", port)
411+
return ports
412+
413+
360414
def listen_ssl(
361415
bind_addresses: Collection[str],
362416
port: int,

synapse/app/generic_worker.py

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
from synapse.federation.transport.server import TransportLayerServer
4545
from synapse.http.server import JsonResource, OptionsResource
4646
from synapse.http.servlet import RestServlet, parse_json_object_from_request
47-
from synapse.http.site import SynapseRequest, SynapseSite
47+
from synapse.http.site import SynapseRequest
4848
from synapse.logging.context import LoggingContext
4949
from synapse.metrics import METRICS_PREFIX, MetricsResource, RegistryProxy
5050
from synapse.replication.http import REPLICATION_PREFIX, ReplicationRestResource
@@ -268,16 +268,9 @@ class GenericWorkerServer(HomeServer):
268268
DATASTORE_CLASS = GenericWorkerSlavedStore # type: ignore
269269

270270
def _listen_http(self, listener_config: ListenerConfig) -> None:
271-
port = listener_config.port
272-
bind_addresses = listener_config.bind_addresses
273-
tls = listener_config.tls
274271

275272
assert listener_config.http_options is not None
276273

277-
site_tag = listener_config.http_options.tag
278-
if site_tag is None:
279-
site_tag = str(port)
280-
281274
# We always include a health resource.
282275
resources: Dict[str, Resource] = {"/health": HealthResource()}
283276

@@ -376,37 +369,14 @@ def _listen_http(self, listener_config: ListenerConfig) -> None:
376369

377370
root_resource = create_resource_tree(resources, OptionsResource())
378371

379-
site = SynapseSite(
380-
"synapse.access.%s.%s" % ("https" if tls else "http", site_tag),
381-
site_tag,
372+
_base.listen_http(
382373
listener_config,
383374
root_resource,
384375
self.version_string,
385-
max_request_body_size=max_request_body_size(self.config),
376+
max_request_body_size(self.config),
377+
self.tls_server_context_factory,
386378
reactor=self.get_reactor(),
387379
)
388-
# This has same logic as synapse/app/homeserver.py where we choose between
389-
# listen_ssl and listen_tcp based on the tls configuration flag in listener
390-
# config.
391-
if tls:
392-
# refresh_certificate should have been called before this.
393-
assert self.tls_server_context_factory is not None
394-
_base.listen_ssl(
395-
bind_addresses,
396-
port,
397-
site,
398-
self.tls_server_context_factory,
399-
reactor=self.get_reactor(),
400-
)
401-
logger.info("Synapse worker now listening on port %d (TLS)", port)
402-
else:
403-
_base.listen_tcp(
404-
bind_addresses,
405-
port,
406-
site,
407-
reactor=self.get_reactor(),
408-
)
409-
logger.info("Synapse worker now listening on port %d", port)
410380

411381
def start_listening(self) -> None:
412382
for listener in self.config.worker.worker_listeners:

synapse/app/homeserver.py

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@
3737
from synapse.app import _base
3838
from synapse.app._base import (
3939
handle_startup_exception,
40-
listen_ssl,
41-
listen_tcp,
40+
listen_http,
4241
max_request_body_size,
4342
redirect_stdio_to_logs,
4443
register_start,
@@ -53,7 +52,6 @@
5352
RootOptionsRedirectResource,
5453
StaticResource,
5554
)
56-
from synapse.http.site import SynapseSite
5755
from synapse.logging.context import LoggingContext
5856
from synapse.metrics import METRICS_PREFIX, MetricsResource, RegistryProxy
5957
from synapse.replication.http import REPLICATION_PREFIX, ReplicationRestResource
@@ -83,8 +81,6 @@ def _listener_http(
8381
self, config: HomeServerConfig, listener_config: ListenerConfig
8482
) -> Iterable[Port]:
8583
port = listener_config.port
86-
bind_addresses = listener_config.bind_addresses
87-
tls = listener_config.tls
8884
# Must exist since this is an HTTP listener.
8985
assert listener_config.http_options is not None
9086
site_tag = listener_config.http_options.tag
@@ -140,37 +136,15 @@ def _listener_http(
140136
else:
141137
root_resource = OptionsResource()
142138

143-
site = SynapseSite(
144-
"synapse.access.%s.%s" % ("https" if tls else "http", site_tag),
145-
site_tag,
139+
ports = listen_http(
146140
listener_config,
147141
create_resource_tree(resources, root_resource),
148142
self.version_string,
149-
max_request_body_size=max_request_body_size(self.config),
143+
max_request_body_size(self.config),
144+
self.tls_server_context_factory,
150145
reactor=self.get_reactor(),
151146
)
152147

153-
if tls:
154-
# refresh_certificate should have been called before this.
155-
assert self.tls_server_context_factory is not None
156-
ports = listen_ssl(
157-
bind_addresses,
158-
port,
159-
site,
160-
self.tls_server_context_factory,
161-
reactor=self.get_reactor(),
162-
)
163-
logger.info("Synapse now listening on TCP port %d (TLS)", port)
164-
165-
else:
166-
ports = listen_tcp(
167-
bind_addresses,
168-
port,
169-
site,
170-
reactor=self.get_reactor(),
171-
)
172-
logger.info("Synapse now listening on TCP port %d", port)
173-
174148
return ports
175149

176150
def _configure_named_resource(

0 commit comments

Comments
 (0)