Skip to content

Commit f2b3866

Browse files
committed
refactor
1 parent 020094f commit f2b3866

File tree

3 files changed

+24
-33
lines changed

3 files changed

+24
-33
lines changed

services/director-v2/src/simcore_service_director_v2/modules/comp_scheduler/__init__.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from fastapi import FastAPI
66
from servicelib.logging_utils import log_context
77

8-
from ._constants import MODULE_NAME
8+
from ._constants import MODULE_NAME_SCHEDULER
99
from ._manager import run_new_pipeline, setup_manager, shutdown_manager, stop_pipeline
1010
from ._worker import setup_worker, shutdown_worker
1111

@@ -14,7 +14,9 @@
1414

1515
def on_app_startup(app: FastAPI) -> Callable[[], Coroutine[Any, Any, None]]:
1616
async def start_scheduler() -> None:
17-
with log_context(_logger, level=logging.INFO, msg=f"starting {MODULE_NAME}"):
17+
with log_context(
18+
_logger, level=logging.INFO, msg=f"starting {MODULE_NAME_SCHEDULER}"
19+
):
1820
await setup_worker(app)
1921
await setup_manager(app)
2022

@@ -23,7 +25,9 @@ async def start_scheduler() -> None:
2325

2426
def on_app_shutdown(app: FastAPI) -> Callable[[], Coroutine[Any, Any, None]]:
2527
async def stop_scheduler() -> None:
26-
with log_context(_logger, level=logging.INFO, msg=f"stopping {MODULE_NAME}"):
28+
with log_context(
29+
_logger, level=logging.INFO, msg=f"stopping {MODULE_NAME_SCHEDULER}"
30+
):
2731
await shutdown_manager(app)
2832
await shutdown_worker(app)
2933

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import datetime
22
from typing import Final
33

4-
MODULE_NAME: Final[str] = "computational-distributed-scheduler"
4+
MODULE_NAME_SCHEDULER: Final[str] = "computational-distributed-scheduler"
55
MODULE_NAME_WORKER: Final[str] = "computational-distributed-worker"
66
SCHEDULER_INTERVAL: Final[datetime.timedelta] = datetime.timedelta(seconds=5)
77
MAX_CONCURRENT_PIPELINE_SCHEDULING: Final[int] = 10

services/director-v2/src/simcore_service_director_v2/modules/comp_scheduler/_manager.py

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,22 @@
88
from models_library.users import UserID
99
from servicelib.background_task import start_periodic_task, stop_periodic_task
1010
from servicelib.logging_utils import log_context
11-
from servicelib.redis import RedisClientSDK
1211
from servicelib.redis_utils import exclusive
1312
from servicelib.utils import limited_gather
14-
from settings_library.redis import RedisDatabase
1513

1614
from ...models.comp_runs import RunMetadataDict
1715
from ...utils.rabbitmq import publish_project_log
1816
from ..db import get_db_engine
1917
from ..db.repositories.comp_pipelines import CompPipelinesRepository
2018
from ..db.repositories.comp_runs import CompRunsRepository
2119
from ..rabbitmq import get_rabbitmq_client
22-
from ..redis import get_redis_client_manager
2320
from ._constants import (
2421
MAX_CONCURRENT_PIPELINE_SCHEDULING,
25-
MODULE_NAME,
22+
MODULE_NAME_SCHEDULER,
2623
SCHEDULER_INTERVAL,
2724
)
2825
from ._publisher import request_pipeline_scheduling
29-
from ._utils import SCHEDULED_STATES
26+
from ._utils import SCHEDULED_STATES, get_redis_client_from_app, get_redis_lock_key
3027

3128
_logger = logging.getLogger(__name__)
3229

@@ -99,28 +96,13 @@ async def stop_pipeline(
9996
if updated_comp_run:
10097
# ensure the scheduler starts right away
10198
rabbitmq_client = get_rabbitmq_client(app)
102-
await request_pipeline_scheduling(updated_comp_run, rabbitmq_client, db_engine)
103-
104-
105-
def _get_app_from_args(*args, **kwargs) -> FastAPI:
106-
assert kwargs is not None # nosec
107-
if args:
108-
app = args[0]
109-
else:
110-
assert "app" in kwargs # nosec
111-
app = kwargs["app"]
112-
assert isinstance(app, FastAPI) # nosec
113-
return app
114-
115-
116-
def _redis_client_getter(*args, **kwargs) -> RedisClientSDK:
117-
app = _get_app_from_args(*args, **kwargs)
118-
return get_redis_client_manager(app).client(RedisDatabase.LOCKS)
119-
120-
121-
def _redis_lock_key_builder(*args, **kwargs) -> str:
122-
app = _get_app_from_args(*args, **kwargs)
123-
return f"{app.title}_{MODULE_NAME}"
99+
await request_pipeline_scheduling(
100+
rabbitmq_client,
101+
db_engine,
102+
user_id=updated_comp_run.user_id,
103+
project_id=updated_comp_run.project_uuid,
104+
iteration=updated_comp_run.iteration,
105+
)
124106

125107

126108
async def _get_pipeline_dag(project_id: ProjectID, db_engine: Engine) -> nx.DiGraph:
@@ -129,7 +111,12 @@ async def _get_pipeline_dag(project_id: ProjectID, db_engine: Engine) -> nx.DiGr
129111
return pipeline_at_db.get_graph()
130112

131113

132-
@exclusive(_redis_client_getter, lock_key=_redis_lock_key_builder)
114+
@exclusive(
115+
get_redis_client_from_app,
116+
lock_key=get_redis_lock_key(
117+
MODULE_NAME_SCHEDULER, unique_lock_key_builder=lambda: ""
118+
),
119+
)
133120
async def schedule_pipelines(app: FastAPI) -> None:
134121
with log_context(_logger, logging.DEBUG, msg="scheduling pipelines"):
135122
db_engine = get_db_engine(app)
@@ -159,7 +146,7 @@ async def setup_manager(app: FastAPI) -> None:
159146
app.state.scheduler_manager = start_periodic_task(
160147
schedule_pipelines,
161148
interval=SCHEDULER_INTERVAL,
162-
task_name=MODULE_NAME,
149+
task_name=MODULE_NAME_SCHEDULER,
163150
app=app,
164151
)
165152

0 commit comments

Comments
 (0)