Skip to content

Commit 9155bfd

Browse files
committed
Make process_idle_volumes work with pipelines
1 parent 5816ff8 commit 9155bfd

2 files changed

Lines changed: 27 additions & 21 deletions

File tree

src/dstack/_internal/server/background/pipeline_tasks/volumes.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,7 @@ async def fetch(self, limit: int) -> list[VolumePipelineItem]:
128128
select(VolumeModel)
129129
.where(
130130
or_(
131-
VolumeModel.status.in_([VolumeStatus.SUBMITTED]),
132-
# TODO: Process active volumes
133-
# and_(
134-
# VolumeModel.status == VolumeStatus.ACTIVE,
135-
# VolumeModel.auto_cleanup_enabled == True,
136-
# ),
131+
VolumeModel.status == VolumeStatus.SUBMITTED,
137132
VolumeModel.to_be_deleted == True,
138133
),
139134
VolumeModel.deleted == False,

src/dstack/_internal/server/background/scheduled_tasks/idle_volumes.py

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
volume_model_to_volume,
2020
)
2121
from dstack._internal.server.utils import sentry_utils
22+
from dstack._internal.settings import FeatureFlags
2223
from dstack._internal.utils import common
2324
from dstack._internal.utils.common import get_current_datetime
2425
from dstack._internal.utils.logging import get_logger
@@ -35,7 +36,9 @@ async def process_idle_volumes():
3536
select(VolumeModel.id)
3637
.where(
3738
VolumeModel.status == VolumeStatus.ACTIVE,
39+
VolumeModel.auto_cleanup_enabled != False,
3840
VolumeModel.deleted == False,
41+
VolumeModel.lock_expires_at.is_(None),
3942
VolumeModel.id.not_in(lockset),
4043
)
4144
.order_by(VolumeModel.last_processed_at.asc())
@@ -90,23 +93,31 @@ def _get_idle_time(volume: VolumeModel) -> datetime.timedelta:
9093

9194

9295
async def _delete_idle_volumes(session: AsyncSession, volumes: List[VolumeModel]):
93-
# Note: Multiple volumes are deleted in the same transaction,
94-
# so long deletion of one volume may block processing other volumes.
9596
for volume_model in volumes:
9697
logger.info("Deleting idle volume %s", volume_model.name)
97-
try:
98-
await _delete_idle_volume(session, volume_model)
99-
except Exception:
100-
logger.exception("Error when deleting idle volume %s", volume_model.name)
101-
102-
volume_model.deleted = True
103-
volume_model.deleted_at = get_current_datetime()
104-
events.emit(
105-
session=session,
106-
message="Volume deleted due to exceeding auto_cleanup_duration",
107-
actor=events.SystemActor(),
108-
targets=[events.Target.from_model(volume_model)],
109-
)
98+
if FeatureFlags.PIPELINE_PROCESSING_ENABLED:
99+
volume_model.to_be_deleted = True
100+
events.emit(
101+
session=session,
102+
message="Volume marked for deletion due to exceeding auto_cleanup_duration",
103+
actor=events.SystemActor(),
104+
targets=[events.Target.from_model(volume_model)],
105+
)
106+
else:
107+
try:
108+
# Note: Multiple volumes are deleted in the same transaction,
109+
# so long deletion of one volume may block processing other volumes.
110+
await _delete_idle_volume(session, volume_model)
111+
except Exception:
112+
logger.exception("Error when deleting idle volume %s", volume_model.name)
113+
volume_model.deleted = True
114+
volume_model.deleted_at = get_current_datetime()
115+
events.emit(
116+
session=session,
117+
message="Volume deleted due to exceeding auto_cleanup_duration",
118+
actor=events.SystemActor(),
119+
targets=[events.Target.from_model(volume_model)],
120+
)
110121

111122
await session.commit()
112123

0 commit comments

Comments
 (0)