Skip to content

Commit 77a2143

Browse files
author
Andrei Neagu
committed
reroute getting labels
1 parent 02a1a8c commit 77a2143

File tree

11 files changed

+64
-67
lines changed

11 files changed

+64
-67
lines changed

services/catalog/src/simcore_service_catalog/api/rest/_services_labels.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ async def get_service_labels(
1616
service_key: ServiceKey,
1717
service_version: ServiceVersion,
1818
director_client: Annotated[DirectorApi, Depends(get_director_api)],
19-
) -> Envelope[dict[str, Any]]:
19+
) -> Envelope[dict[str, Any]]: # TODO: change the type
2020
response = await director_client.get(
2121
f"/services/{urllib.parse.quote_plus(service_key)}/{service_version}/labels"
2222
)
23+
# TODO: remove the envelope since it does not make sense
2324
return Envelope[dict[str, Any]](data=cast(dict[str, Any], response))

services/director-v2/src/simcore_service_director_v2/api/routes/dynamic_services.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
from models_library.projects import ProjectAtDB, ProjectID
1818
from models_library.projects_nodes_io import NodeID
1919
from models_library.service_settings_labels import SimcoreServiceLabels
20-
from models_library.services import ServiceKeyVersion
2120
from models_library.users import UserID
2221
from pydantic import NonNegativeFloat, NonNegativeInt
2322
from servicelib.fastapi.requests_decorators import cancel_on_disconnect
2423
from servicelib.logging_utils import log_decorator
2524
from servicelib.rabbitmq import RabbitMQClient
2625
from servicelib.utils import logged_gather
26+
from simcore_service_director_v2.api.dependencies.catalog import get_catalog_client
2727
from starlette import status
2828
from starlette.datastructures import URL
2929
from tenacity import RetryCallState, TryAgain
@@ -37,6 +37,7 @@
3737
from ...core.dynamic_services_settings import DynamicServicesSettings
3838
from ...core.dynamic_services_settings.scheduler import DynamicServicesSchedulerSettings
3939
from ...modules import projects_networks
40+
from ...modules.catalog import CatalogClient
4041
from ...modules.db.repositories.projects import ProjectsRepository
4142
from ...modules.db.repositories.projects_networks import ProjectsNetworksRepository
4243
from ...modules.director_v0 import DirectorV0Client
@@ -104,6 +105,7 @@ async def list_tracked_dynamic_services(
104105
@log_decorator(logger=logger)
105106
async def create_dynamic_service(
106107
service: DynamicServiceCreate,
108+
catalog_client: CatalogClient,
107109
director_v0_client: Annotated[DirectorV0Client, Depends(get_director_v0_client)],
108110
dynamic_services_settings: Annotated[
109111
DynamicServicesSettings, Depends(get_dynamic_services_settings)
@@ -114,9 +116,7 @@ async def create_dynamic_service(
114116
x_simcore_user_agent: str = Header(...),
115117
) -> DynamicServiceGet | RedirectResponse:
116118
simcore_service_labels: SimcoreServiceLabels = (
117-
await director_v0_client.get_service_labels(
118-
service=ServiceKeyVersion(key=service.key, version=service.version)
119-
)
119+
await catalog_client.get_service_labels(service.key, service.version)
120120
)
121121

122122
# LEGACY (backwards compatibility)
@@ -324,7 +324,7 @@ async def update_projects_networks(
324324
ProjectsRepository, Depends(get_repository(ProjectsRepository))
325325
],
326326
scheduler: Annotated[DynamicSidecarsScheduler, Depends(get_scheduler)],
327-
director_v0_client: Annotated[DirectorV0Client, Depends(get_director_v0_client)],
327+
catalog_client: Annotated[CatalogClient, Depends(get_catalog_client)],
328328
rabbitmq_client: Annotated[
329329
RabbitMQClient, Depends(get_rabbitmq_client_from_request)
330330
],
@@ -334,7 +334,7 @@ async def update_projects_networks(
334334
projects_networks_repository=projects_networks_repository,
335335
projects_repository=projects_repository,
336336
scheduler=scheduler,
337-
director_v0_client=director_v0_client,
337+
catalog_client=catalog_client,
338338
rabbitmq_client=rabbitmq_client,
339339
project_id=project_id,
340340
)

services/director-v2/src/simcore_service_director_v2/cli/_core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from rich.live import Live
1717
from rich.table import Table
1818
from servicelib.services_utils import get_service_from_key
19+
from simcore_service_director_v2.modules.catalog import CatalogClient
1920
from tenacity.asyncio import AsyncRetrying
2021
from tenacity.stop import stop_after_attempt
2122
from tenacity.wait import wait_random_exponential
@@ -25,7 +26,6 @@
2526
from ..models.dynamic_services_scheduler import DynamicSidecarNamesHelper
2627
from ..modules import db, director_v0, dynamic_sidecar
2728
from ..modules.db.repositories.projects import ProjectsRepository
28-
from ..modules.director_v0 import DirectorV0Client
2929
from ..modules.dynamic_sidecar import api_client
3030
from ..modules.projects_networks import requires_dynamic_sidecar
3131
from ..utils.db import get_repository
@@ -101,7 +101,7 @@ async def async_project_save_state(project_id: ProjectID, save_attempts: int) ->
101101
if not await requires_dynamic_sidecar(
102102
service_key=node_content.key,
103103
service_version=node_content.version,
104-
director_v0_client=DirectorV0Client.instance(app),
104+
catalog_client=CatalogClient.instance(app),
105105
):
106106
continue
107107

services/director-v2/src/simcore_service_director_v2/modules/catalog.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import httpx
77
from fastapi import FastAPI, HTTPException, status
8+
from models_library.service_settings_labels import SimcoreServiceLabels
89
from models_library.services import ServiceKey, ServiceVersion
910
from models_library.services_resources import ServiceResourcesDict
1011
from models_library.users import UserID
@@ -14,6 +15,7 @@
1415
from settings_library.tracing import TracingSettings
1516

1617
from ..utils.client_decorators import handle_errors, handle_retry
18+
from ..utils.clients import unenvelope_or_raise_error
1719

1820
logger = logging.getLogger(__name__)
1921

@@ -107,6 +109,18 @@ async def get_service_resources(
107109
return json_response
108110
raise HTTPException(status_code=resp.status_code, detail=resp.content)
109111

112+
async def get_service_labels(
113+
self, service_key: ServiceKey, service_version: ServiceVersion
114+
) -> SimcoreServiceLabels:
115+
resp = await self.request(
116+
"GET",
117+
f"/services/{urllib.parse.quote( service_key, safe='')}/{service_version}/labels",
118+
)
119+
resp.raise_for_status()
120+
if resp.status_code == status.HTTP_200_OK:
121+
return SimcoreServiceLabels.model_validate(unenvelope_or_raise_error(resp))
122+
raise HTTPException(status_code=resp.status_code, detail=resp.content)
123+
110124
async def get_service_specifications(
111125
self, user_id: UserID, service_key: ServiceKey, service_version: ServiceVersion
112126
) -> dict[str, Any]:

services/director-v2/src/simcore_service_director_v2/modules/db/repositories/comp_tasks/_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ async def _get_node_infos(
150150
] = await asyncio.gather(
151151
_get_service_details(catalog_client, user_id, product_name, node),
152152
director_client.get_service_extras(node.key, node.version),
153-
director_client.get_service_labels(node),
153+
catalog_client.get_service_labels(node.key, node.version),
154154
)
155155
return result
156156

services/director-v2/src/simcore_service_director_v2/modules/director_v0.py

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
from models_library.api_schemas_directorv2.services import ServiceExtras
1515
from models_library.projects import ProjectID
1616
from models_library.projects_nodes_io import NodeID
17-
from models_library.service_settings_labels import SimcoreServiceLabels
18-
from models_library.services import ServiceKey, ServiceKeyVersion, ServiceVersion
17+
from models_library.services import ServiceKey, ServiceVersion
1918
from models_library.users import UserID
2019
from servicelib.fastapi.tracing import setup_httpx_client_tracing
2120
from servicelib.logging_utils import log_decorator
@@ -107,19 +106,6 @@ async def get_running_service_details(
107106
)
108107
raise HTTPException(status_code=resp.status_code, detail=resp.content)
109108

110-
@log_decorator(logger=logger)
111-
async def get_service_labels(
112-
self, service: ServiceKeyVersion
113-
) -> SimcoreServiceLabels:
114-
resp = await self._request(
115-
"GET",
116-
f"services/{urllib.parse.quote_plus(service.key)}/{service.version}/labels",
117-
)
118-
resp.raise_for_status()
119-
if resp.status_code == status.HTTP_200_OK:
120-
return SimcoreServiceLabels.model_validate(unenvelope_or_raise_error(resp))
121-
raise HTTPException(status_code=resp.status_code, detail=resp.content)
122-
123109
@log_decorator(logger=logger)
124110
async def get_running_services(
125111
self, user_id: UserID | None = None, project_id: ProjectID | None = None

services/director-v2/src/simcore_service_director_v2/modules/dynamic_sidecar/docker_service_specs/settings.py

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
SimcoreServiceSettingLabelEntry,
1515
SimcoreServiceSettingsLabel,
1616
)
17-
from models_library.services import ServiceKeyVersion
1817
from models_library.services_resources import (
1918
CPU_100_PERCENT,
2019
DEFAULT_SINGLE_SERVICE_NAME,
@@ -29,7 +28,7 @@
2928
MATCH_SERVICE_VERSION,
3029
)
3130

32-
from ....modules.director_v0 import DirectorV0Client
31+
from ....modules.catalog import CatalogClient
3332
from ..errors import DynamicSidecarError
3433

3534
BOOT_OPTION_PREFIX = "DY_BOOT_OPTION"
@@ -193,7 +192,7 @@ def _assemble_key(service_key: str, service_tag: str) -> str:
193192

194193

195194
async def _extract_osparc_involved_service_labels(
196-
director_v0_client: DirectorV0Client,
195+
catalog_client: CatalogClient,
197196
service_key: str,
198197
service_tag: str,
199198
service_labels: SimcoreServiceLabels,
@@ -252,10 +251,8 @@ def remap_to_compose_spec_key() -> dict[str, SimcoreServiceLabels]:
252251
reverse_mapping[involved_key] = compose_service_key
253252

254253
simcore_service_labels: SimcoreServiceLabels = (
255-
await director_v0_client.get_service_labels(
256-
service=ServiceKeyVersion(
257-
key=current_service_key, version=current_service_tag
258-
)
254+
await catalog_client.get_service_labels(
255+
current_service_key, current_service_tag
259256
)
260257
)
261258
docker_image_name_by_services[involved_key] = simcore_service_labels
@@ -432,14 +429,12 @@ def _assemble_env_vars_for_boot_options(
432429

433430

434431
async def get_labels_for_involved_services(
435-
director_v0_client: DirectorV0Client,
432+
catalog_client: CatalogClient,
436433
service_key: ServiceKey,
437434
service_tag: ServiceVersion,
438435
) -> dict[str, SimcoreServiceLabels]:
439436
simcore_service_labels: SimcoreServiceLabels = (
440-
await director_v0_client.get_service_labels(
441-
service=ServiceKeyVersion(key=service_key, version=service_tag)
442-
)
437+
await catalog_client.get_service_labels(service_key, service_tag)
443438
)
444439
log.info(
445440
"image=%s, tag=%s, labels=%s", service_key, service_tag, simcore_service_labels
@@ -451,7 +446,7 @@ async def get_labels_for_involved_services(
451446
labels_for_involved_services: dict[
452447
str, SimcoreServiceLabels
453448
] = await _extract_osparc_involved_service_labels(
454-
director_v0_client=director_v0_client,
449+
catalog_client=catalog_client,
455450
service_key=service_key,
456451
service_tag=service_tag,
457452
service_labels=simcore_service_labels,
@@ -461,7 +456,7 @@ async def get_labels_for_involved_services(
461456

462457

463458
async def merge_settings_before_use(
464-
director_v0_client: DirectorV0Client,
459+
catalog_client: CatalogClient,
465460
*,
466461
service_key: ServiceKey,
467462
service_tag: ServiceVersion,
@@ -470,7 +465,7 @@ async def merge_settings_before_use(
470465
placement_substitutions: dict[str, DockerPlacementConstraint],
471466
) -> SimcoreServiceSettingsLabel:
472467
labels_for_involved_services = await get_labels_for_involved_services(
473-
director_v0_client=director_v0_client,
468+
catalog_client=catalog_client,
474469
service_key=service_key,
475470
service_tag=service_tag,
476471
)

services/director-v2/src/simcore_service_director_v2/modules/dynamic_sidecar/scheduler/_core/_event_create_sidecars.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,10 @@ async def action(cls, app: FastAPI, scheduler_data: SchedulerData) -> None:
188188
)
189189
_logger.info("%s", f"{boot_options=}")
190190

191+
catalog_client = CatalogClient.instance(app)
192+
191193
settings: SimcoreServiceSettingsLabel = await merge_settings_before_use(
192-
director_v0_client=director_v0_client,
194+
catalog_client=catalog_client,
193195
service_key=scheduler_data.key,
194196
service_tag=scheduler_data.version,
195197
service_user_selection_boot_options=boot_options,
@@ -257,7 +259,6 @@ async def action(cls, app: FastAPI, scheduler_data: SchedulerData) -> None:
257259
rpc_client=rpc_client,
258260
)
259261

260-
catalog_client = CatalogClient.instance(app)
261262
user_specific_service_spec = (
262263
await catalog_client.get_service_specifications(
263264
scheduler_data.user_id, scheduler_data.key, scheduler_data.version

services/director-v2/src/simcore_service_director_v2/modules/dynamic_sidecar/scheduler/_core/_events_user_services.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from models_library.projects import ProjectAtDB
66
from models_library.projects_nodes_io import NodeIDStr
77
from models_library.service_settings_labels import SimcoreServiceLabels
8-
from models_library.services import ServiceKeyVersion, ServiceVersion
8+
from models_library.services import ServiceVersion
99
from models_library.services_creation import CreateServiceMetricsAdditionalParams
1010
from pydantic import TypeAdapter
1111
from servicelib.fastapi.long_running_tasks.client import TaskId
@@ -19,16 +19,15 @@
1919
DynamicServicesSchedulerSettings,
2020
)
2121
from .....models.dynamic_services_scheduler import SchedulerData
22+
from .....modules.catalog import CatalogClient
2223
from .....modules.instrumentation import get_instrumentation, get_metrics_labels
2324
from .....utils.db import get_repository
2425
from ....db.repositories.groups_extra_properties import GroupsExtraPropertiesRepository
2526
from ....db.repositories.projects import ProjectsRepository
2627
from ....db.repositories.users import UsersRepository
27-
from ....director_v0 import DirectorV0Client
2828
from ...api_client import get_sidecars_client
2929
from ...docker_compose_specs import assemble_spec
3030
from ...errors import EntrypointContainerNotFoundError
31-
from ._events_utils import get_director_v0_client
3231

3332
_logger = logging.getLogger(__name__)
3433

@@ -63,12 +62,10 @@ async def submit_compose_sepc(app: FastAPI, scheduler_data: SchedulerData) -> No
6362
# creates a docker compose spec given the service key and tag
6463
# fetching project form DB and fetching user settings
6564

66-
director_v0_client: DirectorV0Client = get_director_v0_client(app)
65+
catalog_client = CatalogClient.instance(app)
6766
simcore_service_labels: SimcoreServiceLabels = (
68-
await director_v0_client.get_service_labels(
69-
service=ServiceKeyVersion(
70-
key=scheduler_data.key, version=scheduler_data.version
71-
)
67+
await catalog_client.get_service_labels(
68+
scheduler_data.key, scheduler_data.version
7269
)
7370
)
7471

services/director-v2/src/simcore_service_director_v2/modules/dynamic_sidecar/scheduler/_core/_events_utils.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from models_library.projects_nodes_io import NodeID, NodeIDStr
1313
from models_library.rabbitmq_messages import InstrumentationRabbitMessage
1414
from models_library.service_settings_labels import SimcoreServiceLabels
15-
from models_library.services import ServiceKeyVersion
1615
from models_library.shared_user_preferences import (
1716
AllowMetricsCollectionFrontendUserPreference,
1817
)
@@ -52,6 +51,7 @@
5251
DockerStatus,
5352
SchedulerData,
5453
)
54+
from .....modules.catalog import CatalogClient
5555
from .....modules.instrumentation import (
5656
get_instrumentation,
5757
get_metrics_labels,
@@ -534,12 +534,10 @@ async def _restore_service_state_with_metrics() -> None:
534534
await limited_gather(*tasks, limit=3)
535535

536536
# inside this directory create the missing dirs, fetch those form the labels
537-
director_v0_client: DirectorV0Client = get_director_v0_client(app)
537+
catalog_client = CatalogClient.instance(app)
538538
simcore_service_labels: SimcoreServiceLabels = (
539-
await director_v0_client.get_service_labels(
540-
service=ServiceKeyVersion(
541-
key=scheduler_data.key, version=scheduler_data.version
542-
)
539+
await catalog_client.get_service_labels(
540+
scheduler_data.key, scheduler_data.version
543541
)
544542
)
545543
service_outputs_labels = json.loads(

0 commit comments

Comments
 (0)