Skip to content

Commit f54c525

Browse files
author
Andrei Neagu
committed
using SingletonInAppStateMixin for VolumesManager
1 parent 4543264 commit f54c525

File tree

4 files changed

+16
-13
lines changed

4 files changed

+16
-13
lines changed

services/agent/src/simcore_service_agent/api/rpc/_volumes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from servicelib.rabbitmq.rpc_interfaces.agent.errors import (
88
NoServiceVolumesFoundRPCError,
99
)
10-
from simcore_service_agent.services.volumes_manager import get_volumes_manager
10+
from simcore_service_agent.services.volumes_manager import VolumesManager
1111

1212
_logger = logging.getLogger(__name__)
1313

@@ -19,10 +19,10 @@ async def remove_volumes_without_backup_for_service(
1919
app: FastAPI, *, node_id: NodeID
2020
) -> None:
2121
with log_context(_logger, logging.INFO, f"removing volumes for service: {node_id}"):
22-
await get_volumes_manager(app).remove_service_volumes(node_id)
22+
await VolumesManager.get_from_app_state(app).remove_service_volumes(node_id)
2323

2424

2525
@router.expose()
2626
async def backup_and_remove_volumes_for_all_services(app: FastAPI) -> None:
2727
with log_context(_logger, logging.INFO, "removing all service volumes from node"):
28-
await get_volumes_manager(app).remove_all_volumes()
28+
await VolumesManager.get_from_app_state(app).remove_all_volumes()

services/agent/src/simcore_service_agent/services/volumes_manager.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from models_library.projects_nodes_io import NodeID
1111
from pydantic import NonNegativeFloat
1212
from servicelib.background_task import start_periodic_task, stop_periodic_task
13+
from servicelib.fastapi.app_state import SingletonInAppStateMixin
1314
from servicelib.logging_utils import log_context
1415
from servicelib.rabbitmq.rpc_interfaces.agent.errors import (
1516
NoServiceVolumesFoundRPCError,
@@ -25,7 +26,7 @@
2526

2627

2728
@dataclass
28-
class VolumesManager:
29+
class VolumesManager(SingletonInAppStateMixin):
2930
app: FastAPI
3031
book_keeping_interval: timedelta
3132
volume_cleanup_interval: timedelta
@@ -39,6 +40,8 @@ class VolumesManager:
3940

4041
_task_periodic_volume_cleanup: Task | None = None
4142

43+
app_state_name: str = "volumes_manager"
44+
4245
async def setup(self) -> None:
4346
self._task_bookkeeping = start_periodic_task(
4447
self._bookkeeping_task,
@@ -160,25 +163,24 @@ async def remove_all_volumes(self) -> None:
160163

161164

162165
def get_volumes_manager(app: FastAPI) -> VolumesManager:
163-
volumes_manager: VolumesManager = app.state.volumes_manager
164-
return volumes_manager
166+
return VolumesManager.get_from_app_state(app)
165167

166168

167169
def setup_volume_manager(app: FastAPI) -> None:
168170
async def _on_startup() -> None:
169171
settings: ApplicationSettings = app.state.settings
170172

171-
volumes_manager = app.state.volumes_manager = VolumesManager(
173+
volumes_manager = VolumesManager(
172174
app=app,
173175
book_keeping_interval=settings.AGENT_VOLUMES_CLENUP_BOOK_KEEPING_INTERVAL,
174176
volume_cleanup_interval=settings.AGENT_VOLUMES_CLEANUP_INTERVAL,
175177
remove_volumes_inactive_for=settings.AGENT_VOLUMES_CLENUP_REMOVE_VOLUMES_INACTIVE_FOR.total_seconds(),
176178
)
179+
volumes_manager.set_to_app_state(app)
177180
await volumes_manager.setup()
178181

179182
async def _on_shutdown() -> None:
180-
volumes_manager: VolumesManager = app.state.volumes_manager
181-
await volumes_manager.shutdown()
183+
await VolumesManager.get_from_app_state(app).shutdown()
182184

183185
app.add_event_handler("startup", _on_startup)
184186
app.add_event_handler("shutdown", _on_shutdown)

services/agent/tests/unit/test_services_backup.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from simcore_service_agent.core.settings import ApplicationSettings
1717
from simcore_service_agent.services.backup import backup_volume
1818
from simcore_service_agent.services.docker_utils import get_volume_details
19-
from simcore_service_agent.services.volumes_manager import get_volumes_manager
19+
from simcore_service_agent.services.volumes_manager import VolumesManager
2020
from utils import VOLUMES_TO_CREATE
2121

2222
pytest_simcore_core_services_selection = [
@@ -60,7 +60,8 @@ async def test_backup_volume(
6060

6161
for volume in volumes:
6262
volume_details = await get_volume_details(
63-
get_volumes_manager(initialized_app).docker, volume_name=volume
63+
VolumesManager.get_from_app_state(initialized_app).docker,
64+
volume_name=volume,
6465
)
6566
# root permissions are required to access the /var/docker data
6667
# overwriting with a mocked path for this test

services/agent/tests/unit/test_services_docker_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
get_volume_details,
2222
remove_volume,
2323
)
24-
from simcore_service_agent.services.volumes_manager import get_volumes_manager
24+
from simcore_service_agent.services.volumes_manager import VolumesManager
2525
from utils import VOLUMES_TO_CREATE, get_source
2626

2727
pytest_simcore_core_services_selection = [
@@ -52,7 +52,7 @@ def test__does_volume_require_backup(
5252

5353
@pytest.fixture
5454
def volumes_manager_docker_client(initialized_app: FastAPI) -> Docker:
55-
volumes_manager = get_volumes_manager(initialized_app)
55+
volumes_manager = VolumesManager.get_from_app_state(initialized_app)
5656
return volumes_manager.docker
5757

5858

0 commit comments

Comments
 (0)