Skip to content

Commit 4e1b56c

Browse files
Fix MissingGreenlet error in process_idle_volumes
1 parent c073017 commit 4e1b56c

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33

44
from sqlalchemy import select, update
55
from sqlalchemy.ext.asyncio import AsyncSession
6-
from sqlalchemy.orm import selectinload
6+
from sqlalchemy.orm import joinedload
77

88
from dstack._internal.core.backends.base.compute import ComputeWithVolumeSupport
99
from dstack._internal.core.errors import BackendNotAvailable
1010
from dstack._internal.core.models.profiles import parse_duration
1111
from dstack._internal.core.models.volumes import VolumeStatus
1212
from dstack._internal.server.db import get_db, get_session_ctx
13-
from dstack._internal.server.models import VolumeModel
13+
from dstack._internal.server.models import ProjectModel, VolumeModel
1414
from dstack._internal.server.services import backends as backends_services
1515
from dstack._internal.server.services.locking import get_locker
1616
from dstack._internal.server.services.volumes import (
@@ -45,12 +45,13 @@ async def process_idle_volumes():
4545
for volume_id in volume_ids:
4646
lockset.add(volume_id)
4747

48+
# Refetch volumes with proper relationship loading to avoid MissingGreenlet
4849
res = await session.execute(
4950
select(VolumeModel)
5051
.where(VolumeModel.id.in_(volume_ids))
51-
.options(selectinload(VolumeModel.project))
52-
.options(selectinload(VolumeModel.user))
53-
.options(selectinload(VolumeModel.attachments))
52+
.options(joinedload(VolumeModel.project).joinedload(ProjectModel.backends))
53+
.options(joinedload(VolumeModel.user))
54+
.options(joinedload(VolumeModel.attachments))
5455
.execution_options(populate_existing=True)
5556
)
5657
volumes = list(res.unique().scalars().all())

0 commit comments

Comments
 (0)