Skip to content

Commit e391377

Browse files
GitHKAndrei Neagu
andauthored
♻️ rerouted update projects networks via dynamic-scheduler (#6945)
Co-authored-by: Andrei Neagu <[email protected]>
1 parent 95d208b commit e391377

35 files changed

+160
-77
lines changed

packages/pytest-simcore/src/pytest_simcore/services_api_mocks_for_aiohttp_clients.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,6 @@ async def director_v2_service_mock(
172172
r"^http://[a-z\-_]*director-v2:[0-9]+/v2/computations/.*:stop$"
173173
)
174174
delete_computation_pattern = get_computation_pattern
175-
projects_networks_pattern = re.compile(
176-
r"^http://[a-z\-_]*director-v2:[0-9]+/v2/dynamic_services/projects/.*/-/networks$"
177-
)
178175

179176
get_services_pattern = re.compile(
180177
r"^http://[a-z\-_]*director-v2:[0-9]+/v2/dynamic_services.*$"
@@ -202,7 +199,6 @@ async def director_v2_service_mock(
202199
repeat=True,
203200
)
204201
aioresponses_mocker.delete(delete_computation_pattern, status=204, repeat=True)
205-
aioresponses_mocker.patch(projects_networks_pattern, status=204, repeat=True)
206202

207203
return aioresponses_mocker
208204

packages/service-library/src/servicelib/rabbitmq/rpc_interfaces/dynamic_scheduler/services.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,16 @@ async def stop_dynamic_service(
9393
timeout_s=timeout_s,
9494
)
9595
assert result is None # nosec
96+
97+
98+
@log_decorator(_logger, level=logging.DEBUG)
99+
async def update_projects_networks(
100+
rabbitmq_rpc_client: RabbitMQRPCClient, *, project_id: ProjectID
101+
) -> None:
102+
result = await rabbitmq_rpc_client.request(
103+
DYNAMIC_SCHEDULER_RPC_NAMESPACE,
104+
_RPC_METHOD_NAME_ADAPTER.validate_python("update_projects_networks"),
105+
project_id=project_id,
106+
timeout_s=_RPC_DEFAULT_TIMEOUT_S,
107+
)
108+
assert result is None # nosec

services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/rpc/_services.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,8 @@ async def stop_dynamic_service(
5656
return await scheduler_interface.stop_dynamic_service(
5757
app, dynamic_service_stop=dynamic_service_stop
5858
)
59+
60+
61+
@router.expose()
62+
async def update_projects_networks(app: FastAPI, *, project_id: ProjectID) -> None:
63+
await scheduler_interface.update_projects_networks(app, project_id=project_id)

services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/_public_client.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ async def list_tracked_dynamic_services(
108108
)
109109
return TypeAdapter(list[DynamicServiceGet]).validate_python(response.json())
110110

111+
async def update_projects_networks(self, *, project_id: ProjectID) -> None:
112+
await self.thin_client.patch_projects_networks(project_id=project_id)
113+
111114

112115
def setup_director_v2(app: FastAPI) -> None:
113116
public_client = DirectorV2Client(app)

services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/_thin_client.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,10 @@ async def get_dynamic_services(
124124
"/dynamic_services",
125125
params=as_dict_exclude_unset(user_id=user_id, project_id=project_id),
126126
)
127+
128+
@retry_on_errors()
129+
@expect_status(status.HTTP_204_NO_CONTENT)
130+
async def patch_projects_networks(self, *, project_id: ProjectID) -> Response:
131+
return await self.client.patch(
132+
f"/dynamic_services/projects/{project_id}/-/networks"
133+
)

services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/scheduler_interface.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,12 @@ async def stop_dynamic_service(
7373
)
7474

7575
await set_request_as_stopped(app, dynamic_service_stop)
76+
77+
78+
async def update_projects_networks(app: FastAPI, *, project_id: ProjectID) -> None:
79+
settings: ApplicationSettings = app.state.settings
80+
if settings.DYNAMIC_SCHEDULER_USE_INTERNAL_SCHEDULER:
81+
raise NotImplementedError
82+
83+
director_v2_client = DirectorV2Client.get_from_app_state(app)
84+
await director_v2_client.update_projects_networks(project_id=project_id)

services/dynamic-scheduler/tests/unit/api_rpc/test_api_rpc__services.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,3 +490,24 @@ async def test_stop_dynamic_service_serializes_generic_errors(
490490
),
491491
timeout_s=5,
492492
)
493+
494+
495+
@pytest.fixture
496+
def mock_director_v2_update_projects_networks(project_id: ProjectID) -> Iterator[None]:
497+
with respx.mock(
498+
base_url="http://director-v2:8000/v2",
499+
assert_all_called=False,
500+
assert_all_mocked=True, # IMPORTANT: KEEP always True!
501+
) as mock:
502+
mock.patch(f"/dynamic_services/projects/{project_id}/-/networks").respond(
503+
status.HTTP_204_NO_CONTENT
504+
)
505+
yield None
506+
507+
508+
async def test_update_projects_networks(
509+
mock_director_v2_update_projects_networks: None,
510+
rpc_client: RabbitMQRPCClient,
511+
project_id: ProjectID,
512+
):
513+
await services.update_projects_networks(rpc_client, project_id=project_id)

services/web/server/src/simcore_service_webserver/director_v2/_core_dynamic_services.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,6 @@ async def restart_dynamic_service(app: web.Application, node_uuid: str) -> None:
8383
)
8484

8585

86-
@log_decorator(logger=_log)
87-
async def update_dynamic_service_networks_in_project(
88-
app: web.Application, project_id: ProjectID
89-
) -> None:
90-
settings: DirectorV2Settings = get_plugin_settings(app)
91-
backend_url = (
92-
URL(settings.base_url) / f"dynamic_services/projects/{project_id}/-/networks"
93-
)
94-
await request_director_v2(
95-
app, "PATCH", backend_url, expected_status=web.HTTPNoContent
96-
)
97-
98-
9986
@log_decorator(logger=_log)
10087
async def get_project_inactivity(
10188
app: web.Application,

services/web/server/src/simcore_service_webserver/director_v2/api.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
request_retrieve_dyn_service,
2222
restart_dynamic_service,
2323
retrieve,
24-
update_dynamic_service_networks_in_project,
2524
)
2625
from ._core_utils import is_healthy
2726
from .exceptions import DirectorServiceError
@@ -43,6 +42,5 @@
4342
"retrieve",
4443
"set_project_run_policy",
4544
"stop_pipeline",
46-
"update_dynamic_service_networks_in_project",
4745
)
4846
# nopycln: file

services/web/server/src/simcore_service_webserver/dynamic_scheduler/api.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,11 @@ async def stop_dynamic_services_in_project(
148148
]
149149

150150
await logged_gather(*services_to_stop)
151+
152+
153+
async def update_projects_networks(
154+
app: web.Application, *, project_id: ProjectID
155+
) -> None:
156+
await services.update_projects_networks(
157+
get_rabbitmq_rpc_client(app), project_id=project_id
158+
)

0 commit comments

Comments
 (0)