Skip to content

Commit 0fea032

Browse files
authored
Replace enums with strings in the DB, JobSubmission.termination_reason, and Run.termination_reason (#2949)
* Store all enums as strings in DB * Make run and job termination_reason a string * Start using JobTerminationReason.WAITING_INSTANCE_LIMIT_EXCEEDED * Rebase migrations
1 parent 5c8450f commit 0fea032

File tree

8 files changed

+516
-26
lines changed

8 files changed

+516
-26
lines changed

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -350,15 +350,17 @@ class JobSubmission(CoreModel):
350350
deployment_num: int = 0 # default for compatibility with pre-0.19.14 servers
351351
submitted_at: datetime
352352
last_processed_at: datetime
353-
finished_at: Optional[datetime]
354-
inactivity_secs: Optional[int]
353+
finished_at: Optional[datetime] = None
354+
inactivity_secs: Optional[int] = None
355355
status: JobStatus
356356
status_message: str = "" # default for backward compatibility
357-
termination_reason: Optional[JobTerminationReason]
358-
termination_reason_message: Optional[str]
359-
exit_status: Optional[int]
360-
job_provisioning_data: Optional[JobProvisioningData]
361-
job_runtime_data: Optional[JobRuntimeData]
357+
# termination_reason stores JobTerminationReason.
358+
# str allows adding new enum members without breaking compatibility with old clients.
359+
termination_reason: Optional[str] = None
360+
termination_reason_message: Optional[str] = None
361+
exit_status: Optional[int] = None
362+
job_provisioning_data: Optional[JobProvisioningData] = None
363+
job_runtime_data: Optional[JobRuntimeData] = None
362364
error: Optional[str] = None
363365
probes: list[Probe] = []
364366

@@ -508,7 +510,9 @@ class Run(CoreModel):
508510
last_processed_at: datetime
509511
status: RunStatus
510512
status_message: str = "" # default for backward compatibility
511-
termination_reason: Optional[RunTerminationReason] = None
513+
# termination_reason stores RunTerminationReason.
514+
# str allows adding new enum members without breaking compatibility with old clients.
515+
termination_reason: Optional[str] = None
512516
run_spec: RunSpec
513517
jobs: List[Job]
514518
latest_job_submission: Optional[JobSubmission] = None

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,8 +455,7 @@ async def _wait_for_instance_provisioning_data(job_model: JobModel):
455455

456456
if job_model.instance.status == InstanceStatus.TERMINATED:
457457
job_model.status = JobStatus.TERMINATING
458-
# TODO use WAITING_INSTANCE_LIMIT_EXCEEDED after 0.19.x
459-
job_model.termination_reason = JobTerminationReason.FAILED_TO_START_DUE_TO_NO_CAPACITY
458+
job_model.termination_reason = JobTerminationReason.WAITING_INSTANCE_LIMIT_EXCEEDED
460459
return
461460

462461
job_model.job_provisioning_data = job_model.instance.job_provisioning_data

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

0 commit comments

Comments
 (0)