Skip to content

Commit e638627

Browse files
efs improvements
1 parent d38a6c3 commit e638627

File tree

7 files changed

+80
-16
lines changed

7 files changed

+80
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
"""add `enable_efs` to group extra properties
2+
3+
Revision ID: ea3952fe5a0e
4+
Revises: 8a742f3efdd9
5+
Create Date: 2024-10-07 06:24:42.464942+00:00
6+
7+
"""
8+
import sqlalchemy as sa
9+
from alembic import op
10+
11+
# revision identifiers, used by Alembic.
12+
revision = "ea3952fe5a0e"
13+
down_revision = "8a742f3efdd9"
14+
branch_labels = None
15+
depends_on = None
16+
17+
18+
def upgrade():
19+
# ### commands auto generated by Alembic - please adjust! ###
20+
op.add_column(
21+
"groups_extra_properties",
22+
sa.Column(
23+
"enable_efs", sa.Boolean(), server_default=sa.text("false"), nullable=False
24+
),
25+
)
26+
# ### end Alembic commands ###
27+
28+
29+
def downgrade():
30+
# ### commands auto generated by Alembic - please adjust! ###
31+
op.drop_column("groups_extra_properties", "enable_efs")
32+
# ### end Alembic commands ###

packages/postgres-database/src/simcore_postgres_database/models/groups_extra_properties.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@
6363
server_default=sa.sql.expression.false(),
6464
doc="If true, will send telemetry for new style dynamic services to frontend",
6565
),
66+
sa.Column(
67+
"enable_efs",
68+
sa.Boolean(),
69+
nullable=False,
70+
server_default=sa.sql.expression.false(),
71+
doc="If true, will mount efs distributed file system when dynamic services starts",
72+
),
6673
sa.UniqueConstraint(
6774
"group_id", "product_name", name="group_id_product_name_uniqueness"
6875
),

packages/postgres-database/src/simcore_postgres_database/utils_groups_extra_properties.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class GroupExtraProperties(FromRowMixin):
3232
enable_telemetry: bool
3333
created: datetime.datetime
3434
modified: datetime.datetime
35+
enable_efs: bool
3536

3637

3738
async def _list_table_entries_ordered_by_group_type(

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from pydantic import BaseModel
12
from simcore_postgres_database.utils_groups_extra_properties import (
23
GroupExtraProperties,
34
GroupExtraPropertiesRepo,
@@ -6,6 +7,12 @@
67
from ._base import BaseRepository
78

89

10+
class UserExtraProperties(BaseModel):
11+
is_internet_enabled: bool
12+
is_telemetry_enabled: bool
13+
is_efs_enabled: bool
14+
15+
916
class GroupsExtraPropertiesRepository(BaseRepository):
1017
async def _get_aggregated_properties_for_user(
1118
self,
@@ -31,3 +38,15 @@ async def is_telemetry_enabled(self, *, user_id: int, product_name: str) -> bool
3138
)
3239
telemetry_enabled: bool = group_extra_properties.enable_telemetry
3340
return telemetry_enabled
41+
42+
async def get_user_extra_properties(
43+
self, *, user_id: int, product_name: str
44+
) -> UserExtraProperties:
45+
group_extra_properties = await self._get_aggregated_properties_for_user(
46+
user_id=user_id, product_name=product_name
47+
)
48+
return UserExtraProperties(
49+
is_internet_enabled=group_extra_properties.internet_access,
50+
is_telemetry_enabled=group_extra_properties.enable_telemetry,
51+
is_efs_enabled=group_extra_properties.enable_efs,
52+
)

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

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from ....core.dynamic_services_settings.sidecar import DynamicSidecarSettings
3131
from ....core.settings import AppSettings
3232
from ....models.dynamic_services_scheduler import SchedulerData
33+
from ....modules.db.repositories.groups_extra_properties import UserExtraProperties
3334
from .._namespace import get_compose_namespace
3435
from ..volumes import DynamicSidecarVolumesPathsResolver
3536
from ._constants import DOCKER_CONTAINER_SPEC_RESTART_POLICY_DEFAULTS
@@ -220,6 +221,7 @@ async def _get_mounts(
220221
app_settings: AppSettings,
221222
has_quota_support: bool,
222223
rpc_client: RabbitMQRPCClient,
224+
is_efs_enabled: bool,
223225
) -> list[dict[str, Any]]:
224226
mounts: list[dict[str, Any]] = [
225227
# docker socket needed to use the docker api
@@ -270,18 +272,9 @@ async def _get_mounts(
270272
)
271273
)
272274

273-
# We check whether user has access to EFS feature
274-
use_efs = False
275-
efs_settings = dynamic_sidecar_settings.DYNAMIC_SIDECAR_EFS_SETTINGS
276-
if (
277-
efs_settings
278-
and scheduler_data.user_id in efs_settings.EFS_ONLY_ENABLED_FOR_USERIDS
279-
):
280-
use_efs = True
281-
282275
# state paths now get mounted via different driver and are synced to s3 automatically
283276
for path_to_mount in scheduler_data.paths_mapping.state_paths:
284-
if use_efs:
277+
if is_efs_enabled:
285278
assert dynamic_sidecar_settings.DYNAMIC_SIDECAR_EFS_SETTINGS # nosec
286279

287280
_storage_directory_name = DynamicSidecarVolumesPathsResolver.volume_name(
@@ -414,7 +407,7 @@ async def get_dynamic_sidecar_spec( # pylint:disable=too-many-arguments# noqa:
414407
allow_internet_access: bool,
415408
hardware_info: HardwareInfo | None,
416409
metrics_collection_allowed: bool,
417-
telemetry_enabled: bool,
410+
user_extra_properties: UserExtraProperties,
418411
rpc_client: RabbitMQRPCClient,
419412
) -> AioDockerServiceSpec:
420413
"""
@@ -434,6 +427,7 @@ async def get_dynamic_sidecar_spec( # pylint:disable=too-many-arguments# noqa:
434427
app_settings=app_settings,
435428
has_quota_support=has_quota_support,
436429
rpc_client=rpc_client,
430+
is_efs_enabled=user_extra_properties.is_efs_enabled,
437431
)
438432

439433
ports = _get_ports(
@@ -514,7 +508,7 @@ async def get_dynamic_sidecar_spec( # pylint:disable=too-many-arguments# noqa:
514508
app_settings,
515509
allow_internet_access=allow_internet_access,
516510
metrics_collection_allowed=metrics_collection_allowed,
517-
telemetry_enabled=telemetry_enabled,
511+
telemetry_enabled=user_extra_properties.is_telemetry_enabled,
518512
),
519513
"Hosts": [],
520514
"Image": dynamic_sidecar_settings.DYNAMIC_SIDECAR_IMAGE,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ async def action(cls, app: FastAPI, scheduler_data: SchedulerData) -> None:
218218
scheduler_data.run_id = RunID.create()
219219

220220
# telemetry configuration
221-
is_telemetry_enabled = await groups_extra_properties.is_telemetry_enabled(
221+
user_extra_properties = await groups_extra_properties.get_user_extra_properties(
222222
user_id=scheduler_data.user_id, product_name=scheduler_data.product_name
223223
)
224224

@@ -237,7 +237,7 @@ async def action(cls, app: FastAPI, scheduler_data: SchedulerData) -> None:
237237
has_quota_support=dynamic_services_scheduler_settings.DYNAMIC_SIDECAR_ENABLE_VOLUME_LIMITS,
238238
allow_internet_access=allow_internet_access,
239239
metrics_collection_allowed=metrics_collection_allowed,
240-
telemetry_enabled=is_telemetry_enabled,
240+
user_extra_properties=user_extra_properties,
241241
rpc_client=rpc_client,
242242
)
243243

services/director-v2/tests/unit/with_dbs/test_modules_dynamic_sidecar_docker_service_specs.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
)
3939
from simcore_service_director_v2.models.dynamic_services_scheduler import SchedulerData
4040
from simcore_service_director_v2.modules.catalog import CatalogClient
41+
from simcore_service_director_v2.modules.db.repositories.groups_extra_properties import (
42+
UserExtraProperties,
43+
)
4144
from simcore_service_director_v2.modules.dynamic_sidecar.docker_service_specs import (
4245
get_dynamic_sidecar_spec,
4346
)
@@ -453,7 +456,11 @@ async def test_get_dynamic_proxy_spec(
453456
has_quota_support=False,
454457
allow_internet_access=False,
455458
metrics_collection_allowed=True,
456-
telemetry_enabled=True,
459+
user_extra_properties=UserExtraProperties(
460+
is_internet_enabled=True,
461+
is_telemetry_enabled=False,
462+
is_efs_enabled=False,
463+
),
457464
rpc_client=Mock(),
458465
)
459466

@@ -548,7 +555,11 @@ async def test_merge_dynamic_sidecar_specs_with_user_specific_specs(
548555
has_quota_support=False,
549556
allow_internet_access=False,
550557
metrics_collection_allowed=True,
551-
telemetry_enabled=True,
558+
user_extra_properties=UserExtraProperties(
559+
is_internet_enabled=True,
560+
is_telemetry_enabled=False,
561+
is_efs_enabled=False,
562+
),
552563
rpc_client=Mock(),
553564
)
554565
assert dynamic_sidecar_spec

0 commit comments

Comments
 (0)