Skip to content

Commit 49ba553

Browse files
authored
Merge branch 'master' into is7734/more-app-keys
2 parents a8a6a04 + dde3639 commit 49ba553

File tree

6 files changed

+28
-18
lines changed

6 files changed

+28
-18
lines changed

packages/service-library/src/servicelib/long_running_tasks/_redis_store.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,21 @@ def _load_from_redis_hash(data: dict[str, str]) -> dict[str, Any]:
2323
return {k: json_loads(v) for k, v in data.items()}
2424

2525

26+
def to_redis_namespace(lrt_namespace: LRTNamespace) -> str:
27+
return lrt_namespace.upper()
28+
29+
2630
class RedisStore:
27-
def __init__(self, redis_settings: RedisSettings, namespace: LRTNamespace):
31+
def __init__(self, redis_settings: RedisSettings, lrt_namespace: LRTNamespace):
2832
self.redis_settings = redis_settings
29-
self.namespace: LRTNamespace = namespace.upper()
33+
self.redis_namespace = to_redis_namespace(lrt_namespace)
3034

3135
self._client: RedisClientSDK | None = None
3236

3337
async def setup(self) -> None:
3438
self._client = RedisClientSDK(
3539
self.redis_settings.build_redis_dsn(RedisDatabase.LONG_RUNNING_TASKS),
36-
client_name=f"long_running_tasks_store_{self.namespace}",
40+
client_name=f"long_running_tasks_store_{self.redis_namespace}",
3741
)
3842
await self._client.setup()
3943

@@ -47,10 +51,10 @@ def _redis(self) -> aioredis.Redis:
4751
return self._client.redis
4852

4953
def _get_redis_key_task_data_match(self) -> str:
50-
return f"{self.namespace}:{_STORE_TYPE_TASK_DATA}*"
54+
return f"{self.redis_namespace}:{_STORE_TYPE_TASK_DATA}*"
5155

5256
def _get_redis_task_data_key(self, task_id: TaskId) -> str:
53-
return f"{self.namespace}:{_STORE_TYPE_TASK_DATA}:{task_id}"
57+
return f"{self.redis_namespace}:{_STORE_TYPE_TASK_DATA}:{task_id}"
5458

5559
async def get_task_data(self, task_id: TaskId) -> TaskData | None:
5660
result: dict[str, Any] = await handle_redis_returns_union_types(

packages/service-library/src/servicelib/long_running_tasks/long_running_client_helper.py

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

66
from ..logging_utils import log_context
77
from ..redis._client import RedisClientSDK
8+
from ._redis_store import to_redis_namespace
89
from .models import LRTNamespace
910

1011
_logger = logging.getLogger(__name__)
@@ -32,15 +33,16 @@ def _redis(self) -> aioredis.Redis:
3233
assert self._client # nosec
3334
return self._client.redis
3435

35-
async def cleanup(self, lrt_namespace: LRTNamespace) -> None:
36+
async def cleanup(self, namespace: LRTNamespace) -> None:
3637
"""removes Redis keys associated to the LRTNamespace if they exist"""
38+
redis_namespace = to_redis_namespace(namespace)
3739
keys_to_remove: list[str] = [
38-
x async for x in self._redis.scan_iter(f"{lrt_namespace}*")
40+
x async for x in self._redis.scan_iter(f"{redis_namespace}*")
3941
]
4042
with log_context(
4143
_logger,
42-
logging.DEBUG,
43-
msg=f"Removing {keys_to_remove=} from Redis for {lrt_namespace=}",
44+
logging.INFO,
45+
msg=f"Removing {keys_to_remove=} from Redis for {redis_namespace=}",
4446
):
4547
if len(keys_to_remove) > 0:
4648
await self._redis.delete(*keys_to_remove)

packages/service-library/tests/long_running_tasks/test_long_running_tasks__redis_store.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ async def store(
3636
[RedisDatabase], AbstractAsyncContextManager[RedisClientSDK]
3737
],
3838
) -> AsyncIterable[RedisStore]:
39-
store = RedisStore(redis_settings=use_in_memory_redis, namespace="test")
39+
store = RedisStore(redis_settings=use_in_memory_redis, lrt_namespace="test")
4040

4141
await store.setup()
4242
yield store
@@ -78,7 +78,7 @@ async def redis_stores(
7878
],
7979
) -> AsyncIterable[list[RedisStore]]:
8080
stores: list[RedisStore] = [
81-
RedisStore(redis_settings=use_in_memory_redis, namespace=f"test-{i}")
81+
RedisStore(redis_settings=use_in_memory_redis, lrt_namespace=f"test-{i}")
8282
for i in range(5)
8383
]
8484
for store in stores:

packages/service-library/tests/long_running_tasks/test_long_running_tasks_client_long_running_manager.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from copy import deepcopy
66

77
import pytest
8+
from faker import Faker
89
from pydantic import TypeAdapter
910
from servicelib.long_running_tasks._redis_store import RedisStore
1011
from servicelib.long_running_tasks.long_running_client_helper import (
@@ -23,8 +24,8 @@ def task_data() -> TaskData:
2324

2425

2526
@pytest.fixture
26-
def lrt_namespace() -> LRTNamespace:
27-
return "TEST-NAMESPACE"
27+
def lrt_namespace(faker: Faker) -> LRTNamespace:
28+
return TypeAdapter(LRTNamespace).validate_python(f"test-namespace:{faker.uuid4()}")
2829

2930

3031
@pytest.fixture
@@ -35,7 +36,7 @@ async def store(
3536
],
3637
lrt_namespace: LRTNamespace,
3738
) -> AsyncIterable[RedisStore]:
38-
store = RedisStore(redis_settings=use_in_memory_redis, namespace=lrt_namespace)
39+
store = RedisStore(redis_settings=use_in_memory_redis, lrt_namespace=lrt_namespace)
3940

4041
await store.setup()
4142
yield store

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,12 +286,13 @@ async def service_remove_sidecar_proxy_docker_networks_and_volumes(
286286
await app.state.dynamic_sidecar_scheduler.scheduler.remove_service_from_observation(
287287
scheduler_data.node_uuid
288288
)
289+
290+
await _cleanup_long_running_tasks(app, scheduler_data.node_uuid)
291+
289292
await task_progress.update(
290293
message="finished removing resources", percent=ProgressPercent(1)
291294
)
292295

293-
await _cleanup_long_running_tasks(app, scheduler_data.node_uuid)
294-
295296

296297
async def _cleanup_long_running_tasks(app: FastAPI, node_id: NodeID) -> None:
297298
long_running_client_helper = get_long_running_client_helper(app)

services/dynamic-scheduler/tests/unit/services/generic_scheduler/test__core.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,8 +1071,10 @@ async def test_wait_for_manual_intervention(
10711071
await _ensure_keys_in_store(selected_app, expected_keys=formatted_expected_keys)
10721072

10731073
# even if cancelled, state of waiting for manual intervention remains the same
1074-
with pytest.raises(CannotCancelWhileWaitingForManualInterventionError):
1075-
await cancel_operation(selected_app, schedule_id)
1074+
async for attempt in AsyncRetrying(**_RETRY_PARAMS):
1075+
with attempt: # noqa: SIM117
1076+
with pytest.raises(CannotCancelWhileWaitingForManualInterventionError):
1077+
await cancel_operation(selected_app, schedule_id)
10761078

10771079
await _ensure_keys_in_store(selected_app, expected_keys=formatted_expected_keys)
10781080

0 commit comments

Comments
 (0)