Skip to content

Commit f65fc9a

Browse files
authored
⬆️ Maintenance/update aioredis (ITISFoundation#2898)
1 parent b6fa6c2 commit f65fc9a

39 files changed

+568
-318
lines changed

packages/models-library/src/models_library/projects_state.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,14 @@ class Config:
7979

8080
@validator("owner", pre=True, always=True)
8181
@classmethod
82-
def check_not_null(v, values):
82+
def check_not_null(cls, v, values):
8383
if values["value"] is True and v is None:
8484
raise ValueError("value cannot be None when project is locked")
8585
return v
8686

8787
@validator("status", always=True)
8888
@classmethod
89-
def check_status_compatible(v, values):
89+
def check_status_compatible(cls, v, values):
9090
if values["value"] is False and v not in ["CLOSED", "OPENED"]:
9191
raise ValueError(
9292
f"status is set to {v} and lock is set to {values['value']}!"

packages/pytest-simcore/src/pytest_simcore/redis_service.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import logging
66
from typing import AsyncIterator, Dict, Union
77

8-
import aioredis
98
import pytest
109
import tenacity
10+
from redis.asyncio import Redis, from_url
1111
from settings_library.redis import RedisSettings
1212
from tenacity.before_sleep import before_sleep_log
1313
from tenacity.stop import stop_after_delay
@@ -34,7 +34,7 @@ async def redis_settings(
3434
)
3535
# test runner is running on the host computer
3636
settings = RedisSettings(REDIS_HOST=get_localhost_ip(), REDIS_PORT=int(port))
37-
await wait_till_redis_responsive(settings.dsn)
37+
await wait_till_redis_responsive(settings.dsn_resources)
3838

3939
return settings
4040

@@ -56,15 +56,29 @@ def redis_service(
5656
@pytest.fixture(scope="function")
5757
async def redis_client(
5858
redis_settings: RedisSettings,
59-
) -> AsyncIterator[aioredis.Redis]:
59+
) -> AsyncIterator[Redis]:
6060
"""Creates a redis client to communicate with a redis service ready"""
61-
client = await aioredis.create_redis_pool(redis_settings.dsn, encoding="utf-8")
61+
client = from_url(
62+
redis_settings.dsn_resources, encoding="utf-8", decode_responses=True
63+
)
6264

6365
yield client
6466

6567
await client.flushall()
66-
client.close()
67-
await client.wait_closed()
68+
await client.close()
69+
70+
71+
@pytest.fixture(scope="function")
72+
async def redis_locks_client(
73+
redis_settings: RedisSettings,
74+
) -> AsyncIterator[Redis]:
75+
"""Creates a redis client to communicate with a redis service ready"""
76+
client = from_url(redis_settings.dsn_locks, encoding="utf-8", decode_responses=True)
77+
78+
yield client
79+
80+
await client.flushall()
81+
await client.close()
6882

6983

7084
# HELPERS --
@@ -77,6 +91,7 @@ async def redis_client(
7791
reraise=True,
7892
)
7993
async def wait_till_redis_responsive(redis_url: Union[URL, str]) -> None:
80-
client = await aioredis.create_redis_pool(str(redis_url), encoding="utf-8")
81-
client.close()
82-
await client.wait_closed()
94+
client = from_url(f"{redis_url}", encoding="utf-8", decode_responses=True)
95+
96+
if not await client.ping():
97+
raise ConnectionError(f"{redis_url=} not available")

packages/pytest-simcore/src/pytest_simcore/services_api_mocks_for_aiohttp_clients.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,13 @@ async def director_v2_service_mock(
226226
r"^http://[a-z\-_]*director-v2:[0-9]+/v2/dynamic_services/projects/.*/-/networks$"
227227
)
228228

229+
get_services_pattern = re.compile(
230+
r"^http://[a-z\-_]*director-v2:[0-9]+/v2/dynamic_services$"
231+
)
232+
aioresponses_mocker.get(
233+
get_services_pattern, status=web.HTTPOk.status_code, repeat=True
234+
)
235+
229236
aioresponses_mocker.post(
230237
create_computation_pattern,
231238
callback=create_computation_cb,

packages/settings-library/src/settings_library/redis.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from functools import cached_property
22
from typing import Optional
33

4+
from pydantic import Field
45
from pydantic.networks import RedisDsn
56
from pydantic.types import SecretStr
67

@@ -18,10 +19,14 @@ class RedisSettings(BaseCustomSettings):
1819
REDIS_PASSWORD: Optional[SecretStr] = None
1920

2021
# db
21-
REDIS_DB: Optional[str] = "0"
22+
REDIS_RESOURCES_DB: int = Field(
23+
0,
24+
description="typical redis DB have 16 'tables', for convenience we use this table for user resources",
25+
)
26+
REDIS_LOCKS_DB: int = Field(1, description="This redis table is used to put locks")
2227

2328
@cached_property
24-
def dsn(self) -> str:
29+
def dsn_resources(self) -> str:
2530
return RedisDsn.build(
2631
scheme="redis",
2732
user=self.REDIS_USER or None,
@@ -30,5 +35,18 @@ def dsn(self) -> str:
3035
else None,
3136
host=self.REDIS_HOST,
3237
port=f"{self.REDIS_PORT}",
33-
path=f"/{self.REDIS_DB}",
38+
path=f"/{self.REDIS_RESOURCES_DB}",
39+
)
40+
41+
@cached_property
42+
def dsn_locks(self) -> str:
43+
return RedisDsn.build(
44+
scheme="redis",
45+
user=self.REDIS_USER or None,
46+
password=self.REDIS_PASSWORD.get_secret_value()
47+
if self.REDIS_PASSWORD
48+
else None,
49+
host=self.REDIS_HOST,
50+
port=f"{self.REDIS_PORT}",
51+
path=f"/{self.REDIS_LOCKS_DB}",
3452
)

requirements/constraints.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ urllib3>=1.26.5 # https://github.com/advisories/GH
2222
# Breaking changes
2323
#
2424

25-
# TODO: https://aioredis.readthedocs.io/en/latest/migration/)
26-
aioredis<2.0.0
25+
2726
# with new released version 1.0.0 (https://github.com/aio-libs/aiozipkin/releases).
2827
# TODO: includes async features https://docs.sqlalchemy.org/en/14/changelog/migration_20.html
2928
sqlalchemy<2.0

services/catalog/requirements/_base.txt

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,12 @@ aiodebug==1.1.2
1010
# via
1111
# -c requirements/../../../packages/service-library/requirements/./_base.in
1212
# -r requirements/../../../packages/service-library/requirements/_base.in
13-
aiofiles==0.5.0
13+
aiofiles==0.8.0
1414
# via
1515
# -c requirements/../../../packages/service-library/requirements/./_base.in
1616
# -r requirements/../../../packages/service-library/requirements/_base.in
17-
aioredis==1.3.1
18-
# via
19-
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
20-
# -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt
21-
# -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt
22-
# -c requirements/../../../packages/service-library/requirements/./../../../requirements/constraints.txt
23-
# -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt
24-
# -c requirements/../../../requirements/constraints.txt
25-
# aiocache
17+
aioredis==2.0.1
18+
# via aiocache
2619
alembic==1.7.4
2720
# via -r requirements/../../../packages/postgres-database/requirements/_base.in
2821
anyio==3.5.0
@@ -67,8 +60,6 @@ h11==0.12.0
6760
# via
6861
# httpcore
6962
# uvicorn
70-
hiredis==2.0.0
71-
# via aioredis
7263
httpcore==0.14.4
7364
# via httpx
7465
httptools==0.2.0
@@ -77,9 +68,6 @@ httpx==0.21.3
7768
# via -r requirements/_base.in
7869
idna==2.10
7970
# via
80-
# -c requirements/../../../packages/service-library/requirements/././constraints.txt
81-
# -c requirements/../../../packages/service-library/requirements/./constraints.txt
82-
# -r requirements/../../../packages/models-library/requirements/_base.in
8371
# anyio
8472
# email-validator
8573
# requests
@@ -213,7 +201,9 @@ tornado==6.1
213201
typer==0.4.0
214202
# via -r requirements/../../../packages/settings-library/requirements/_base.in
215203
typing-extensions==3.10.0.2
216-
# via pydantic
204+
# via
205+
# aioredis
206+
# pydantic
217207
ujson==4.0.2
218208
# via fastapi
219209
urllib3==1.26.7

services/director-v2/requirements/_test.in

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ minio
3333

3434
# migration due to pytest_simcore.postgres_service2
3535
aio_pika
36-
aioredis
3736
alembic
3837
bokeh
3938
dask-gateway-server[local]

services/director-v2/requirements/_test.txt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@ aiohttp==3.8.1
2121
# pytest-aiohttp
2222
aioitertools==0.10.0
2323
# via aiobotocore
24-
aioredis==1.3.1
25-
# via
26-
# -c requirements/../../../requirements/constraints.txt
27-
# -r requirements/_test.in
2824
aiormq==3.3.1
2925
# via
3026
# -c requirements/_base.txt
@@ -51,7 +47,6 @@ async-timeout==4.0.2
5147
# via
5248
# -c requirements/_base.txt
5349
# aiohttp
54-
# aioredis
5550
attrs==20.3.0
5651
# via
5752
# -c requirements/_base.txt
@@ -146,8 +141,6 @@ h11==0.12.0
146141
# via
147142
# -c requirements/_base.txt
148143
# httpcore
149-
hiredis==2.0.0
150-
# via aioredis
151144
httpcore==0.14.4
152145
# via
153146
# -c requirements/_base.txt

services/director-v2/tests/conftest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
"pytest_simcore.postgres_service",
3434
"pytest_simcore.pydantic_models",
3535
"pytest_simcore.rabbit_service",
36-
"pytest_simcore.redis_service",
3736
"pytest_simcore.repository_paths",
3837
"pytest_simcore.schemas",
3938
"pytest_simcore.simcore_dask_service",

services/director-v2/tests/integration/01/test_computation_api.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
from models_library.projects_pipeline import PipelineDetails
2525
from models_library.projects_state import RunningState
2626
from settings_library.rabbit import RabbitSettings
27-
from settings_library.redis import RedisSettings
2827
from shared_comp_utils import (
2928
COMPUTATION_URL,
3029
assert_and_wait_for_pipeline_status,
@@ -44,7 +43,6 @@
4443
"migration",
4544
"postgres",
4645
"rabbit",
47-
"redis",
4846
"storage",
4947
]
5048
pytest_simcore_ops_services_selection = ["minio", "adminer"]
@@ -81,7 +79,6 @@ def minimal_configuration(
8179
jupyter_service: Dict[str, str],
8280
dask_scheduler_service: str,
8381
dask_sidecar_service: None,
84-
redis_service: RedisSettings,
8582
postgres_db: sa.engine.Engine,
8683
postgres_host_config: Dict[str, str],
8784
rabbit_service: RabbitSettings,

0 commit comments

Comments
 (0)