Skip to content

Commit 58bbd83

Browse files
authored
Fix volume detachment for runs started before 0.18.41 (#2362)
1 parent 18e22c7 commit 58bbd83

File tree

2 files changed

+13
-16
lines changed

2 files changed

+13
-16
lines changed

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
JobModel,
1212
ProjectModel,
1313
VolumeAttachmentModel,
14-
VolumeModel,
1514
)
1615
from dstack._internal.server.services.jobs import (
1716
process_terminating_job,
@@ -86,12 +85,7 @@ async def _process_job(session: AsyncSession, job_model: JobModel):
8685
.where(InstanceModel.id == job_model.used_instance_id)
8786
.options(
8887
joinedload(InstanceModel.project).joinedload(ProjectModel.backends),
89-
joinedload(InstanceModel.volume_attachments)
90-
.joinedload(VolumeAttachmentModel.volume)
91-
.joinedload(VolumeModel.user),
92-
joinedload(InstanceModel.volume_attachments)
93-
.joinedload(VolumeAttachmentModel.volume)
94-
.joinedload(VolumeModel.attachments),
88+
joinedload(InstanceModel.volume_attachments).joinedload(VolumeAttachmentModel.volume),
9589
)
9690
)
9791
instance_model = res.unique().scalar()

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,14 @@ async def process_terminating_job(
236236
logger.debug("%s: stopping container", fmt(job_model))
237237
ssh_private_keys = get_instance_ssh_private_keys(instance_model)
238238
await stop_container(job_model, jpd, ssh_private_keys)
239-
volume_models: list[VolumeModel]
240239
if jrd is not None and jrd.volume_names is not None:
241-
volume_models = await list_project_volume_models(
242-
session=session, project=instance_model.project, names=jrd.volume_names
243-
)
240+
volume_names = jrd.volume_names
244241
else:
245-
volume_models = [va.volume for va in instance_model.volume_attachments]
242+
# Legacy jobs before job_runtime_data/blocks were introduced
243+
volume_names = [va.volume.name for va in instance_model.volume_attachments]
244+
volume_models = await list_project_volume_models(
245+
session=session, project=instance_model.project, names=volume_names
246+
)
246247
if len(volume_models) > 0:
247248
logger.info("Detaching volumes: %s", [v.name for v in volume_models])
248249
all_volumes_detached = await _detach_volumes_from_job_instance(
@@ -302,11 +303,13 @@ async def process_volumes_detaching(
302303
jpd = get_or_error(get_job_provisioning_data(job_model))
303304
jrd = get_job_runtime_data(job_model)
304305
if jrd is not None and jrd.volume_names is not None:
305-
volume_models = await list_project_volume_models(
306-
session=session, project=instance_model.project, names=jrd.volume_names
307-
)
306+
volume_names = jrd.volume_names
308307
else:
309-
volume_models = [va.volume for va in instance_model.volume_attachments]
308+
# Legacy jobs before job_runtime_data/blocks were introduced
309+
volume_names = [va.volume.name for va in instance_model.volume_attachments]
310+
volume_models = await list_project_volume_models(
311+
session=session, project=instance_model.project, names=volume_names
312+
)
310313
logger.info("Detaching volumes: %s", [v.name for v in volume_models])
311314
all_volumes_detached = await _detach_volumes_from_job_instance(
312315
project=instance_model.project,

0 commit comments

Comments
 (0)