|
1 | | -from typing import TypeAlias |
| 1 | +from dataclasses import asdict, dataclass |
| 2 | +from typing import Any, Final, TypeAlias |
| 3 | + |
| 4 | +from dask.typing import Key |
| 5 | +from distributed.scheduler import TaskStateState as SchedulerTaskState |
| 6 | +from distributed.worker_state_machine import TaskStateState as WorkerTaskState |
| 7 | +from models_library.projects_state import RunningState |
2 | 8 |
|
3 | 9 | DaskJobID: TypeAlias = str |
4 | 10 | DaskResources: TypeAlias = dict[str, int | float] |
| 11 | + |
| 12 | +TASK_LIFE_CYCLE_EVENT: Final[str] = "task-lifecycle-{key}" |
| 13 | +_SCHEDULER_TASK_STATE_TO_RUNNING_STATE: Final[ |
| 14 | + dict[SchedulerTaskState, RunningState] |
| 15 | +] = { |
| 16 | + "waiting": RunningState.PENDING, |
| 17 | + "no-worker": RunningState.WAITING_FOR_RESOURCES, |
| 18 | + "queued": RunningState.WAITING_FOR_RESOURCES, |
| 19 | + "processing": RunningState.PENDING, |
| 20 | + "memory": RunningState.SUCCESS, |
| 21 | + "erred": RunningState.FAILED, |
| 22 | + "forgotten": RunningState.UNKNOWN, |
| 23 | +} |
| 24 | + |
| 25 | +_WORKER_TASK_STATE_TO_RUNNING_STATE: Final[dict[WorkerTaskState, RunningState]] = { |
| 26 | + "cancelled": RunningState.UNKNOWN, |
| 27 | + "constrained": RunningState.UNKNOWN, |
| 28 | + "error": RunningState.UNKNOWN, |
| 29 | + "executing": RunningState.UNKNOWN, |
| 30 | + "fetch": RunningState.UNKNOWN, |
| 31 | + "flight": RunningState.UNKNOWN, |
| 32 | + "forgotten": RunningState.UNKNOWN, |
| 33 | + "long-running": RunningState.UNKNOWN, |
| 34 | + "memory": RunningState.UNKNOWN, |
| 35 | + "missing": RunningState.UNKNOWN, |
| 36 | + "ready": RunningState.UNKNOWN, |
| 37 | + "released": RunningState.UNKNOWN, |
| 38 | + "rescheduled": RunningState.UNKNOWN, |
| 39 | + "resumed": RunningState.UNKNOWN, |
| 40 | + "waiting": RunningState.UNKNOWN, |
| 41 | +} |
| 42 | + |
| 43 | + |
| 44 | +@dataclass |
| 45 | +class TaskLifeCycleState: |
| 46 | + key: Key |
| 47 | + worker: str | None |
| 48 | + state: RunningState |
| 49 | + |
| 50 | + @classmethod |
| 51 | + def from_scheduler_task_state( |
| 52 | + cls, key: Key, worker: str | None, task_state: SchedulerTaskState |
| 53 | + ) -> "TaskLifeCycleState": |
| 54 | + return cls( |
| 55 | + key=key, |
| 56 | + worker=worker, |
| 57 | + state=_SCHEDULER_TASK_STATE_TO_RUNNING_STATE[task_state], |
| 58 | + ) |
| 59 | + |
| 60 | + def model_dump(self) -> dict[str, Any]: |
| 61 | + return asdict(self) |
0 commit comments