Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
94b3b08
removed old agent implementation
Sep 25, 2024
92c5232
refactor dependencies
Sep 26, 2024
4df90f7
prune tests
Sep 26, 2024
f7b5a71
dependency upgrade and refactor
Sep 26, 2024
9e2c774
refactor rest api
Sep 26, 2024
d1b1856
fixed requirements layout
Sep 26, 2024
17406d0
fixed requirements
Sep 26, 2024
679fc5b
added new rpc namesapce
Sep 26, 2024
a25d789
added rpc backend
Sep 26, 2024
1051417
updated test requirements
Sep 26, 2024
b8fbba8
proper setup sequence
Sep 26, 2024
f56dad4
fixed cli tests
Sep 26, 2024
856e415
bumped version
Sep 26, 2024
15209c5
refactor tests
Sep 26, 2024
d0458d6
refactor tests
Sep 26, 2024
9eb9b9e
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Sep 26, 2024
d808846
revert modules
Sep 26, 2024
87f794f
refactor rpc routes
Sep 26, 2024
059bd42
wip: adding volume manager
Sep 26, 2024
0a4c064
refactor
Sep 26, 2024
7c02d4c
extracted docker_utils
Sep 27, 2024
d7410d1
rename
Sep 27, 2024
2b4fbb3
rename
Sep 27, 2024
9c6bc57
refactor settings
Sep 27, 2024
9911389
extended tests
Sep 27, 2024
0dfd821
added volume manager implementation
Sep 27, 2024
536a09e
docstring
Sep 27, 2024
e1663ae
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Sep 27, 2024
7f9fb2e
added impmenetation
Sep 27, 2024
0e996b2
tie to director-v2
Sep 27, 2024
f208725
added get volume detials
Sep 27, 2024
18b01c7
stopping periodic tasks when done
Sep 27, 2024
d9bc0b1
refactor to use details
Sep 27, 2024
0166f06
added backup volume code
Sep 27, 2024
557f2a5
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Sep 27, 2024
2c581c2
refactor
Sep 27, 2024
767dd1d
renamed
Sep 27, 2024
42b13d6
rename
Sep 27, 2024
ac24306
reanme
Sep 27, 2024
ef967ff
added tests for services_volumes_manager
Sep 27, 2024
1b94138
refactor path
Sep 27, 2024
ffe04b2
moved to common
Sep 27, 2024
f7ba2cf
added tests for backup
Sep 27, 2024
7ea1dbf
refactor models
Sep 27, 2024
9488bc3
rename
Sep 27, 2024
98454f2
added tests for rpc endpoint
Sep 27, 2024
e6cc226
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Sep 27, 2024
5930d5d
added instrumentation for prometheus metrics
Sep 27, 2024
9a71d52
delegate volume removal to agent
Sep 27, 2024
a5f5c08
fixed volume removal
Sep 30, 2024
0d0fa5e
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Sep 30, 2024
0c24303
fixeed broken tests
Sep 30, 2024
5dec6fa
refactor to use mocks
Sep 30, 2024
b3a34e9
remove old volume removal code
Sep 30, 2024
e8b6ff4
add error for service witht any containers
Sep 30, 2024
ad1807c
fixed integration tests
Sep 30, 2024
affab60
bumped version and extended healthcheck based on rabbitmq
Sep 30, 2024
fbcbb12
changed defaults
Sep 30, 2024
2cbeeab
docstring
Sep 30, 2024
b73e2ca
docstrings
Sep 30, 2024
495af16
add proper check
Sep 30, 2024
2edd1ce
erge remote-tracking branch 'upstream/master' into pr-osparc-rework-a…
Sep 30, 2024
45e8b16
using proper client name
Sep 30, 2024
1e8b0fd
fixed healthcheck button
Sep 30, 2024
9e9ab84
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Sep 30, 2024
a370a71
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Oct 1, 2024
4af7642
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Oct 3, 2024
73c952d
feedback
Oct 3, 2024
8c1bb1f
move _dependencies module
Oct 3, 2024
eaef17b
moved api at root level
Oct 3, 2024
8cb1efd
moved models to volumes package
Oct 3, 2024
409b5bc
remove module
Oct 3, 2024
dd8bcde
refactor tests palcement
Oct 3, 2024
ff45872
refactor error message
Oct 3, 2024
4fda161
exposed error to caller
Oct 3, 2024
df99b2d
catch if volumes were not removed, not important if it fails
Oct 3, 2024
4543264
interface raises error
Oct 3, 2024
f54c525
using SingletonInAppStateMixin for VolumesManager
Oct 3, 2024
93ed403
pylint + mypy
Oct 4, 2024
9f671bb
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Oct 4, 2024
e6b71ae
fixed broken tests
Oct 4, 2024
d65fc91
Merge branch 'master' into pr-osparc-rework-agent-to-handle-volumes
GitHK Oct 4, 2024
9cb432f
fixed typing
Oct 4, 2024
0475f11
fixed mypy
Oct 4, 2024
1a02422
Merge remote-tracking branch 'upstream/master' into pr-osparc-rework-…
Oct 4, 2024
20e2f8e
Merge branch 'pr-osparc-rework-agent-to-handle-volumes' of github.com…
Oct 4, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Any, ClassVar
from typing import Any, ClassVar, Final

from pydantic import BaseModel, Field, validator
from pydantic.types import ByteSize, NonNegativeInt
Expand Down Expand Up @@ -90,3 +90,6 @@ class Config:
for node_example in NodeRequirements.Config.schema_extra["examples"]
]
}


CHARS_IN_VOLUME_NAME_BEFORE_DIR_NAME: Final[NonNegativeInt] = 89
12 changes: 6 additions & 6 deletions packages/service-library/src/servicelib/fastapi/app_state.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import logging
from typing import TypeVar

from fastapi import FastAPI

_logger = logging.getLogger(__name__)
T = TypeVar("T", bound="SingletonInAppStateMixin")


class SingletonInAppStateMixin:
Expand All @@ -14,8 +14,8 @@ class SingletonInAppStateMixin:
frozen: bool = True # Will raise if set multiple times

@classmethod
def get_from_app_state(cls, app: FastAPI):
return getattr(app.state, cls.app_state_name)
def get_from_app_state(cls: type[T], app: FastAPI) -> T:
return getattr(app.state, cls.app_state_name) # type:ignore[no-any-return]

def set_to_app_state(self, app: FastAPI):
if (exists := getattr(app.state, self.app_state_name, None)) and self.frozen:
Expand All @@ -26,11 +26,11 @@ def set_to_app_state(self, app: FastAPI):
return self.get_from_app_state(app)

@classmethod
def pop_from_app_state(cls, app: FastAPI):
def pop_from_app_state(cls: type[T], app: FastAPI) -> T:
"""
Raises:
AttributeError: if instance is not in app.state
"""
old = getattr(app.state, cls.app_state_name)
old = cls.get_from_app_state(app)
delattr(app.state, cls.app_state_name)
return old
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from pydantic.errors import PydanticErrorMixin


class BaseAgentRPCError(PydanticErrorMixin, Exception):
...


class NoServiceVolumesFoundRPCError(BaseAgentRPCError):
msg_template: str = (
"Could not detect any unused volumes after waiting '{period}' seconds for "
"volumes to be released after closing all container for service='{node_id}'"
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import logging
from datetime import timedelta
from typing import Final

from models_library.projects_nodes_io import NodeID
from models_library.rabbitmq_basic_types import RPCMethodName, RPCNamespace
from pydantic import NonNegativeInt, parse_obj_as
from servicelib.logging_utils import log_decorator
from servicelib.rabbitmq import RabbitMQRPCClient

_logger = logging.getLogger(__name__)

_REQUEST_TIMEOUT: Final[NonNegativeInt] = int(timedelta(minutes=60).total_seconds())


@log_decorator(_logger, level=logging.DEBUG)
async def remove_volumes_without_backup_for_service(
rabbitmq_rpc_client: RabbitMQRPCClient,
*,
docker_node_id: str,
swarm_stack_name: str,
node_id: NodeID,
) -> None:
result = await rabbitmq_rpc_client.request(
RPCNamespace.from_entries(
{
"service": "agent",
"docker_node_id": docker_node_id,
"swarm_stack_name": swarm_stack_name,
}
),
parse_obj_as(RPCMethodName, "remove_volumes_without_backup_for_service"),
node_id=node_id,
timeout_s=_REQUEST_TIMEOUT,
)
assert result is None # nosec


@log_decorator(_logger, level=logging.DEBUG)
async def backup_and_remove_volumes_for_all_services(
rabbitmq_rpc_client: RabbitMQRPCClient,
*,
docker_node_id: str,
swarm_stack_name: str,
) -> None:
result = await rabbitmq_rpc_client.request(
RPCNamespace.from_entries(
{
"service": "agent",
"docker_node_id": docker_node_id,
"swarm_stack_name": swarm_stack_name,
}
),
parse_obj_as(RPCMethodName, "backup_and_remove_volumes_for_all_services"),
timeout_s=_REQUEST_TIMEOUT,
)
assert result is None # nosec
2 changes: 1 addition & 1 deletion services/agent/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.0.1
1.0.0
3 changes: 2 additions & 1 deletion services/agent/requirements/_base.in
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@
# intra-repo required dependencies
--requirement ../../../packages/models-library/requirements/_base.in
--requirement ../../../packages/settings-library/requirements/_base.in
# service-library[fastapi]
--requirement ../../../packages/service-library/requirements/_base.in
--requirement ../../../packages/service-library/requirements/_fastapi.in

aiodocker
fastapi
packaging
pydantic
python-dotenv
uvicorn
Loading
Loading