1919 volume_model_to_volume ,
2020)
2121from dstack ._internal .server .utils import sentry_utils
22+ from dstack ._internal .settings import FeatureFlags
2223from dstack ._internal .utils import common
2324from dstack ._internal .utils .common import get_current_datetime
2425from 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
9295async 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