Skip to content

Commit cb9ff6d

Browse files
author
Andrei Neagu
committed
rerouted update_projects_networks
1 parent 92ddd6c commit cb9ff6d

File tree

13 files changed

+86
-36
lines changed

13 files changed

+86
-36
lines changed

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+
)

services/web/server/src/simcore_service_webserver/projects/_crud_api_create.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626

2727
from ..application_settings import get_application_settings
2828
from ..catalog import client as catalog_client
29-
from ..director_v2 import api
29+
from ..director_v2 import api as director_v2_api
30+
from ..dynamic_scheduler import api as dynamic_scheduler_api
3031
from ..folders import _folders_db as folders_db
3132
from ..storage.api import (
3233
copy_data_folders_from_project,
@@ -376,13 +377,13 @@ async def create_project( # pylint: disable=too-many-arguments,too-many-branche
376377
await db.set_hidden_flag(new_project["uuid"], hidden=False)
377378

378379
# update the network information in director-v2
379-
await api.update_dynamic_service_networks_in_project(
380-
request.app, ProjectID(new_project["uuid"])
380+
await dynamic_scheduler_api.update_projects_networks(
381+
request.app, project_id=ProjectID(new_project["uuid"])
381382
)
382383
task_progress.update()
383384

384385
# This is a new project and every new graph needs to be reflected in the pipeline tables
385-
await api.create_or_update_pipeline(
386+
await director_v2_api.create_or_update_pipeline(
386387
request.app, user_id, new_project["uuid"], product_name
387388
)
388389
# get the latest state of the project (lastChangeDate for instance)

0 commit comments

Comments
 (0)