Skip to content

Commit f685318

Browse files
authored
Use ClientRestResource on both the main process and workers. (#14528)
Add logic to ClientRestResource to decide whether to mount servlets or not based on whether the current process is a worker. This is clearer to see what a worker runs than the completely separate / copy & pasted list of servlets being mounted for workers.
1 parent 890e5f6 commit f685318

File tree

8 files changed

+71
-119
lines changed

8 files changed

+71
-119
lines changed

changelog.d/14528.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Share the `ClientRestResource` for both workers and the main process.

synapse/app/generic_worker.py

Lines changed: 2 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -44,40 +44,8 @@
4444
from synapse.logging.context import LoggingContext
4545
from synapse.metrics import METRICS_PREFIX, MetricsResource, RegistryProxy
4646
from synapse.replication.http import REPLICATION_PREFIX, ReplicationRestResource
47+
from synapse.rest import ClientRestResource
4748
from synapse.rest.admin import register_servlets_for_media_repo
48-
from synapse.rest.client import (
49-
account_data,
50-
events,
51-
initial_sync,
52-
login,
53-
presence,
54-
profile,
55-
push_rule,
56-
read_marker,
57-
receipts,
58-
relations,
59-
room,
60-
room_batch,
61-
room_keys,
62-
sendtodevice,
63-
sync,
64-
tags,
65-
user_directory,
66-
versions,
67-
voip,
68-
)
69-
from synapse.rest.client.account import ThreepidRestServlet, WhoamiRestServlet
70-
from synapse.rest.client.devices import DevicesRestServlet
71-
from synapse.rest.client.keys import (
72-
KeyChangesServlet,
73-
KeyQueryServlet,
74-
KeyUploadServlet,
75-
OneTimeKeyServlet,
76-
)
77-
from synapse.rest.client.register import (
78-
RegisterRestServlet,
79-
RegistrationTokenValidityRestServlet,
80-
)
8149
from synapse.rest.health import HealthResource
8250
from synapse.rest.key.v2 import KeyResource
8351
from synapse.rest.synapse.client import build_synapse_client_resource_tree
@@ -200,45 +168,7 @@ def _listen_http(self, listener_config: ListenerConfig) -> None:
200168
if name == "metrics":
201169
resources[METRICS_PREFIX] = MetricsResource(RegistryProxy)
202170
elif name == "client":
203-
resource = JsonResource(self, canonical_json=False)
204-
205-
RegisterRestServlet(self).register(resource)
206-
RegistrationTokenValidityRestServlet(self).register(resource)
207-
login.register_servlets(self, resource)
208-
ThreepidRestServlet(self).register(resource)
209-
WhoamiRestServlet(self).register(resource)
210-
DevicesRestServlet(self).register(resource)
211-
212-
# Read-only
213-
KeyUploadServlet(self).register(resource)
214-
KeyQueryServlet(self).register(resource)
215-
KeyChangesServlet(self).register(resource)
216-
OneTimeKeyServlet(self).register(resource)
217-
218-
voip.register_servlets(self, resource)
219-
push_rule.register_servlets(self, resource)
220-
versions.register_servlets(self, resource)
221-
222-
profile.register_servlets(self, resource)
223-
224-
sync.register_servlets(self, resource)
225-
events.register_servlets(self, resource)
226-
room.register_servlets(self, resource, is_worker=True)
227-
relations.register_servlets(self, resource)
228-
room.register_deprecated_servlets(self, resource)
229-
initial_sync.register_servlets(self, resource)
230-
room_batch.register_servlets(self, resource)
231-
room_keys.register_servlets(self, resource)
232-
tags.register_servlets(self, resource)
233-
account_data.register_servlets(self, resource)
234-
receipts.register_servlets(self, resource)
235-
read_marker.register_servlets(self, resource)
236-
237-
sendtodevice.register_servlets(self, resource)
238-
239-
user_directory.register_servlets(self, resource)
240-
241-
presence.register_servlets(self, resource)
171+
resource: Resource = ClientRestResource(self)
242172

243173
resources[CLIENT_API_PREFIX] = resource
244174

synapse/rest/__init__.py

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
initial_sync,
3030
keys,
3131
knock,
32-
login as v1_login,
32+
login,
3333
login_token_request,
3434
logout,
3535
mutual_rooms,
@@ -82,6 +82,10 @@ def __init__(self, hs: "HomeServer"):
8282

8383
@staticmethod
8484
def register_servlets(client_resource: HttpServer, hs: "HomeServer") -> None:
85+
# Some servlets are only registered on the main process (and not worker
86+
# processes).
87+
is_main_process = hs.config.worker.worker_app is None
88+
8589
versions.register_servlets(hs, client_resource)
8690

8791
# Deprecated in r0
@@ -92,45 +96,58 @@ def register_servlets(client_resource: HttpServer, hs: "HomeServer") -> None:
9296
events.register_servlets(hs, client_resource)
9397

9498
room.register_servlets(hs, client_resource)
95-
v1_login.register_servlets(hs, client_resource)
99+
login.register_servlets(hs, client_resource)
96100
profile.register_servlets(hs, client_resource)
97101
presence.register_servlets(hs, client_resource)
98-
directory.register_servlets(hs, client_resource)
102+
if is_main_process:
103+
directory.register_servlets(hs, client_resource)
99104
voip.register_servlets(hs, client_resource)
100-
pusher.register_servlets(hs, client_resource)
105+
if is_main_process:
106+
pusher.register_servlets(hs, client_resource)
101107
push_rule.register_servlets(hs, client_resource)
102-
logout.register_servlets(hs, client_resource)
108+
if is_main_process:
109+
logout.register_servlets(hs, client_resource)
103110
sync.register_servlets(hs, client_resource)
104-
filter.register_servlets(hs, client_resource)
111+
if is_main_process:
112+
filter.register_servlets(hs, client_resource)
105113
account.register_servlets(hs, client_resource)
106114
register.register_servlets(hs, client_resource)
107-
auth.register_servlets(hs, client_resource)
115+
if is_main_process:
116+
auth.register_servlets(hs, client_resource)
108117
receipts.register_servlets(hs, client_resource)
109118
read_marker.register_servlets(hs, client_resource)
110119
room_keys.register_servlets(hs, client_resource)
111120
keys.register_servlets(hs, client_resource)
112-
tokenrefresh.register_servlets(hs, client_resource)
121+
if is_main_process:
122+
tokenrefresh.register_servlets(hs, client_resource)
113123
tags.register_servlets(hs, client_resource)
114124
account_data.register_servlets(hs, client_resource)
115-
report_event.register_servlets(hs, client_resource)
116-
openid.register_servlets(hs, client_resource)
117-
notifications.register_servlets(hs, client_resource)
125+
if is_main_process:
126+
report_event.register_servlets(hs, client_resource)
127+
openid.register_servlets(hs, client_resource)
128+
notifications.register_servlets(hs, client_resource)
118129
devices.register_servlets(hs, client_resource)
119-
thirdparty.register_servlets(hs, client_resource)
130+
if is_main_process:
131+
thirdparty.register_servlets(hs, client_resource)
120132
sendtodevice.register_servlets(hs, client_resource)
121133
user_directory.register_servlets(hs, client_resource)
122-
room_upgrade_rest_servlet.register_servlets(hs, client_resource)
134+
if is_main_process:
135+
room_upgrade_rest_servlet.register_servlets(hs, client_resource)
123136
room_batch.register_servlets(hs, client_resource)
124-
capabilities.register_servlets(hs, client_resource)
125-
account_validity.register_servlets(hs, client_resource)
137+
if is_main_process:
138+
capabilities.register_servlets(hs, client_resource)
139+
account_validity.register_servlets(hs, client_resource)
126140
relations.register_servlets(hs, client_resource)
127-
password_policy.register_servlets(hs, client_resource)
128-
knock.register_servlets(hs, client_resource)
141+
if is_main_process:
142+
password_policy.register_servlets(hs, client_resource)
143+
knock.register_servlets(hs, client_resource)
129144

130145
# moving to /_synapse/admin
131-
admin.register_servlets_for_client_rest_resource(hs, client_resource)
146+
if is_main_process:
147+
admin.register_servlets_for_client_rest_resource(hs, client_resource)
132148

133149
# unstable
134-
mutual_rooms.register_servlets(hs, client_resource)
135-
login_token_request.register_servlets(hs, client_resource)
136-
rendezvous.register_servlets(hs, client_resource)
150+
if is_main_process:
151+
mutual_rooms.register_servlets(hs, client_resource)
152+
login_token_request.register_servlets(hs, client_resource)
153+
rendezvous.register_servlets(hs, client_resource)

synapse/rest/client/account.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -875,19 +875,21 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
875875

876876

877877
def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
878-
EmailPasswordRequestTokenRestServlet(hs).register(http_server)
879-
PasswordRestServlet(hs).register(http_server)
880-
DeactivateAccountRestServlet(hs).register(http_server)
881-
EmailThreepidRequestTokenRestServlet(hs).register(http_server)
882-
MsisdnThreepidRequestTokenRestServlet(hs).register(http_server)
883-
AddThreepidEmailSubmitTokenServlet(hs).register(http_server)
884-
AddThreepidMsisdnSubmitTokenServlet(hs).register(http_server)
878+
if hs.config.worker.worker_app is None:
879+
EmailPasswordRequestTokenRestServlet(hs).register(http_server)
880+
PasswordRestServlet(hs).register(http_server)
881+
DeactivateAccountRestServlet(hs).register(http_server)
882+
EmailThreepidRequestTokenRestServlet(hs).register(http_server)
883+
MsisdnThreepidRequestTokenRestServlet(hs).register(http_server)
884+
AddThreepidEmailSubmitTokenServlet(hs).register(http_server)
885+
AddThreepidMsisdnSubmitTokenServlet(hs).register(http_server)
885886
ThreepidRestServlet(hs).register(http_server)
886-
ThreepidAddRestServlet(hs).register(http_server)
887-
ThreepidBindRestServlet(hs).register(http_server)
888-
ThreepidUnbindRestServlet(hs).register(http_server)
889-
ThreepidDeleteRestServlet(hs).register(http_server)
887+
if hs.config.worker.worker_app is None:
888+
ThreepidAddRestServlet(hs).register(http_server)
889+
ThreepidBindRestServlet(hs).register(http_server)
890+
ThreepidUnbindRestServlet(hs).register(http_server)
891+
ThreepidDeleteRestServlet(hs).register(http_server)
890892
WhoamiRestServlet(hs).register(http_server)
891893

892-
if hs.config.experimental.msc3720_enabled:
894+
if hs.config.worker.worker_app is None and hs.config.experimental.msc3720_enabled:
893895
AccountStatusRestServlet(hs).register(http_server)

synapse/rest/client/devices.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,10 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
342342

343343

344344
def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
345-
DeleteDevicesRestServlet(hs).register(http_server)
345+
if hs.config.worker.worker_app is None:
346+
DeleteDevicesRestServlet(hs).register(http_server)
346347
DevicesRestServlet(hs).register(http_server)
347-
DeviceRestServlet(hs).register(http_server)
348-
DehydratedDeviceServlet(hs).register(http_server)
349-
ClaimDehydratedDeviceServlet(hs).register(http_server)
348+
if hs.config.worker.worker_app is None:
349+
DeviceRestServlet(hs).register(http_server)
350+
DehydratedDeviceServlet(hs).register(http_server)
351+
ClaimDehydratedDeviceServlet(hs).register(http_server)

synapse/rest/client/keys.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,5 +376,6 @@ def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
376376
KeyQueryServlet(hs).register(http_server)
377377
KeyChangesServlet(hs).register(http_server)
378378
OneTimeKeyServlet(hs).register(http_server)
379-
SigningKeyUploadServlet(hs).register(http_server)
380-
SignaturesUploadServlet(hs).register(http_server)
379+
if hs.config.worker.worker_app is None:
380+
SigningKeyUploadServlet(hs).register(http_server)
381+
SignaturesUploadServlet(hs).register(http_server)

synapse/rest/client/register.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -949,9 +949,10 @@ def _calculate_registration_flows(
949949

950950

951951
def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
952-
EmailRegisterRequestTokenRestServlet(hs).register(http_server)
953-
MsisdnRegisterRequestTokenRestServlet(hs).register(http_server)
954-
UsernameAvailabilityRestServlet(hs).register(http_server)
955-
RegistrationSubmitTokenServlet(hs).register(http_server)
952+
if hs.config.worker.worker_app is None:
953+
EmailRegisterRequestTokenRestServlet(hs).register(http_server)
954+
MsisdnRegisterRequestTokenRestServlet(hs).register(http_server)
955+
UsernameAvailabilityRestServlet(hs).register(http_server)
956+
RegistrationSubmitTokenServlet(hs).register(http_server)
956957
RegistrationTokenValidityRestServlet(hs).register(http_server)
957958
RegisterRestServlet(hs).register(http_server)

synapse/rest/client/room.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,9 +1395,7 @@ async def on_GET(
13951395
)
13961396

13971397

1398-
def register_servlets(
1399-
hs: "HomeServer", http_server: HttpServer, is_worker: bool = False
1400-
) -> None:
1398+
def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
14011399
RoomStateEventRestServlet(hs).register(http_server)
14021400
RoomMemberListRestServlet(hs).register(http_server)
14031401
JoinedRoomMemberListRestServlet(hs).register(http_server)
@@ -1421,7 +1419,7 @@ def register_servlets(
14211419
TimestampLookupRestServlet(hs).register(http_server)
14221420

14231421
# Some servlets only get registered for the main process.
1424-
if not is_worker:
1422+
if hs.config.worker.worker_app is None:
14251423
RoomForgetRestServlet(hs).register(http_server)
14261424

14271425

0 commit comments

Comments
 (0)