Skip to content

Commit 7e51e37

Browse files
committed
Make run and job termination_reason a string
1 parent fee7303 commit 7e51e37

4 files changed

Lines changed: 19 additions & 11 deletions

File tree

src/dstack/_internal/core/models/runs.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -344,15 +344,17 @@ class JobSubmission(CoreModel):
344344
deployment_num: int = 0 # default for compatibility with pre-0.19.14 servers
345345
submitted_at: datetime
346346
last_processed_at: datetime
347-
finished_at: Optional[datetime]
348-
inactivity_secs: Optional[int]
347+
finished_at: Optional[datetime] = None
348+
inactivity_secs: Optional[int] = None
349349
status: JobStatus
350350
status_message: str = "" # default for backward compatibility
351-
termination_reason: Optional[JobTerminationReason]
352-
termination_reason_message: Optional[str]
353-
exit_status: Optional[int]
354-
job_provisioning_data: Optional[JobProvisioningData]
355-
job_runtime_data: Optional[JobRuntimeData]
351+
# termination_reason stores JobTerminationReason.
352+
# str allows adding new enum members without breaking compatibility with old clients.
353+
termination_reason: Optional[str] = None
354+
termination_reason_message: Optional[str] = None
355+
exit_status: Optional[int] = None
356+
job_provisioning_data: Optional[JobProvisioningData] = None
357+
job_runtime_data: Optional[JobRuntimeData] = None
356358
error: Optional[str] = None
357359
probes: list[Probe] = []
358360

@@ -502,7 +504,9 @@ class Run(CoreModel):
502504
last_processed_at: datetime
503505
status: RunStatus
504506
status_message: str = "" # default for backward compatibility
505-
termination_reason: Optional[RunTerminationReason] = None
507+
# termination_reason stores RunTerminationReason.
508+
# str allows adding new enum members without breaking compatibility with old clients.
509+
termination_reason: Optional[str] = None
506510
run_spec: RunSpec
507511
jobs: List[Job]
508512
latest_job_submission: Optional[JobSubmission] = None

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ def _should_retry_job(run: Run, job: Job, job_model: JobModel) -> Optional[datet
574574

575575
if (
576576
last_provisioned_submission.termination_reason is not None
577-
and last_provisioned_submission.termination_reason.to_retry_event()
577+
and JobTerminationReason(last_provisioned_submission.termination_reason).to_retry_event()
578578
in job.job_spec.retry.on_events
579579
):
580580
return common.get_current_datetime() - last_provisioned_submission.last_processed_at

src/dstack/_internal/server/services/jobs/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,9 @@ def job_model_to_job_submission(
152152
inactivity_secs=job_model.inactivity_secs,
153153
status=job_model.status,
154154
status_message=status_message,
155-
termination_reason=job_model.termination_reason,
155+
termination_reason=job_model.termination_reason.value
156+
if job_model.termination_reason
157+
else None,
156158
termination_reason_message=job_model.termination_reason_message,
157159
exit_status=job_model.exit_status,
158160
job_provisioning_data=job_provisioning_data,

src/dstack/_internal/server/services/runs.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,9 @@ def run_model_to_run(
714714
last_processed_at=run_model.last_processed_at,
715715
status=run_model.status,
716716
status_message=status_message,
717-
termination_reason=run_model.termination_reason,
717+
termination_reason=run_model.termination_reason.value
718+
if run_model.termination_reason
719+
else None,
718720
run_spec=run_spec,
719721
jobs=jobs,
720722
latest_job_submission=latest_job_submission,

0 commit comments

Comments
 (0)