Skip to content

Commit 10ed8e7

Browse files
authored
Fix IllegalStateChangeError in delete_metrics task (#2639)
See: https://sqlalche.me/e/20/isce Closes: #2638
1 parent 2f96871 commit 10ed8e7

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

src/dstack/_internal/server/background/tasks/process_metrics.py

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import json
33
from typing import Dict, List, Optional
44

5-
from sqlalchemy import delete, select
5+
from sqlalchemy import Delete, delete, select
66
from sqlalchemy.orm import joinedload
77

88
from dstack._internal.core.consts import DSTACK_RUNNER_HTTP_PORT
@@ -49,27 +49,29 @@ async def delete_metrics():
4949
finished_timestamp_micro_cutoff = (
5050
now_timestamp_micro - settings.SERVER_METRICS_FINISHED_TTL_SECONDS * 1_000_000
5151
)
52+
await asyncio.gather(
53+
_execute_delete_statement(
54+
delete(JobMetricsPoint).where(
55+
JobMetricsPoint.job_id.in_(
56+
select(JobModel.id).where(JobModel.status.in_([JobStatus.RUNNING]))
57+
),
58+
JobMetricsPoint.timestamp_micro < running_timestamp_micro_cutoff,
59+
)
60+
),
61+
_execute_delete_statement(
62+
delete(JobMetricsPoint).where(
63+
JobMetricsPoint.job_id.in_(
64+
select(JobModel.id).where(JobModel.status.in_(JobStatus.finished_statuses()))
65+
),
66+
JobMetricsPoint.timestamp_micro < finished_timestamp_micro_cutoff,
67+
)
68+
),
69+
)
70+
71+
72+
async def _execute_delete_statement(stmt: Delete) -> None:
5273
async with get_session_ctx() as session:
53-
await asyncio.gather(
54-
session.execute(
55-
delete(JobMetricsPoint).where(
56-
JobMetricsPoint.job_id.in_(
57-
select(JobModel.id).where(JobModel.status.in_([JobStatus.RUNNING]))
58-
),
59-
JobMetricsPoint.timestamp_micro < running_timestamp_micro_cutoff,
60-
)
61-
),
62-
session.execute(
63-
delete(JobMetricsPoint).where(
64-
JobMetricsPoint.job_id.in_(
65-
select(JobModel.id).where(
66-
JobModel.status.in_(JobStatus.finished_statuses())
67-
)
68-
),
69-
JobMetricsPoint.timestamp_micro < finished_timestamp_micro_cutoff,
70-
)
71-
),
72-
)
74+
await session.execute(stmt)
7375
await session.commit()
7476

7577

0 commit comments

Comments
 (0)