fix(daytona): make disk cap visible and use SDK enum for sandbox
state - Replace logger.warning with warnings.warn for the disk cap so users actually see it (logger was suppressed by CLI's log level config) - Use SandboxState enum instead of string literals in _ensure_sandbox_ready Signed-off-by: rovle <lovre.pesut@gmail.com>
This commit is contained in:
parent
1faa9648d3
commit
577da79a47
2 changed files with 18 additions and 2 deletions
|
|
@ -27,11 +27,20 @@ def _patch_daytona_imports(monkeypatch):
|
||||||
"""Patch the daytona SDK so DaytonaEnvironment can be imported without it."""
|
"""Patch the daytona SDK so DaytonaEnvironment can be imported without it."""
|
||||||
import types as _types
|
import types as _types
|
||||||
|
|
||||||
|
import enum
|
||||||
|
|
||||||
|
class _SandboxState(str, enum.Enum):
|
||||||
|
STARTED = "started"
|
||||||
|
STOPPED = "stopped"
|
||||||
|
ARCHIVED = "archived"
|
||||||
|
ERROR = "error"
|
||||||
|
|
||||||
daytona_mod = _types.ModuleType("daytona")
|
daytona_mod = _types.ModuleType("daytona")
|
||||||
daytona_mod.Daytona = MagicMock
|
daytona_mod.Daytona = MagicMock
|
||||||
daytona_mod.CreateSandboxFromImageParams = MagicMock
|
daytona_mod.CreateSandboxFromImageParams = MagicMock
|
||||||
daytona_mod.DaytonaError = type("DaytonaError", (Exception,), {})
|
daytona_mod.DaytonaError = type("DaytonaError", (Exception,), {})
|
||||||
daytona_mod.Resources = MagicMock(name="Resources")
|
daytona_mod.Resources = MagicMock(name="Resources")
|
||||||
|
daytona_mod.SandboxState = _SandboxState
|
||||||
|
|
||||||
monkeypatch.setitem(__import__("sys").modules, "daytona", daytona_mod)
|
monkeypatch.setitem(__import__("sys").modules, "daytona", daytona_mod)
|
||||||
return daytona_mod
|
return daytona_mod
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import logging
|
||||||
import math
|
import math
|
||||||
import threading
|
import threading
|
||||||
import uuid
|
import uuid
|
||||||
|
import warnings
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from tools.environments.base import BaseEnvironment
|
from tools.environments.base import BaseEnvironment
|
||||||
|
|
@ -43,10 +44,12 @@ class DaytonaEnvironment(BaseEnvironment):
|
||||||
CreateSandboxFromImageParams,
|
CreateSandboxFromImageParams,
|
||||||
DaytonaError,
|
DaytonaError,
|
||||||
Resources,
|
Resources,
|
||||||
|
SandboxState,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._persistent = persistent_filesystem
|
self._persistent = persistent_filesystem
|
||||||
self._task_id = task_id
|
self._task_id = task_id
|
||||||
|
self._SandboxState = SandboxState
|
||||||
self._daytona = Daytona()
|
self._daytona = Daytona()
|
||||||
self._sandbox = None
|
self._sandbox = None
|
||||||
self._lock = threading.Lock()
|
self._lock = threading.Lock()
|
||||||
|
|
@ -54,7 +57,11 @@ class DaytonaEnvironment(BaseEnvironment):
|
||||||
memory_gib = max(1, math.ceil(memory / 1024))
|
memory_gib = max(1, math.ceil(memory / 1024))
|
||||||
disk_gib = max(1, math.ceil(disk / 1024))
|
disk_gib = max(1, math.ceil(disk / 1024))
|
||||||
if disk_gib > 10:
|
if disk_gib > 10:
|
||||||
logger.warning("Daytona: capping disk from %dGB to 10GB (platform limit)", disk_gib)
|
warnings.warn(
|
||||||
|
f"Daytona: requested disk ({disk_gib}GB) exceeds platform limit (10GB). "
|
||||||
|
f"Capping to 10GB. Set container_disk: 10240 in config to silence this.",
|
||||||
|
stacklevel=2,
|
||||||
|
)
|
||||||
disk_gib = 10
|
disk_gib = 10
|
||||||
resources = Resources(cpu=cpu, memory=memory_gib, disk=disk_gib)
|
resources = Resources(cpu=cpu, memory=memory_gib, disk=disk_gib)
|
||||||
|
|
||||||
|
|
@ -99,7 +106,7 @@ class DaytonaEnvironment(BaseEnvironment):
|
||||||
def _ensure_sandbox_ready(self):
|
def _ensure_sandbox_ready(self):
|
||||||
"""Restart sandbox if it was stopped (e.g., by a previous interrupt)."""
|
"""Restart sandbox if it was stopped (e.g., by a previous interrupt)."""
|
||||||
self._sandbox.refresh_data()
|
self._sandbox.refresh_data()
|
||||||
if self._sandbox.state in ("stopped", "archived"):
|
if self._sandbox.state in (self._SandboxState.STOPPED, self._SandboxState.ARCHIVED):
|
||||||
self._sandbox.start()
|
self._sandbox.start()
|
||||||
logger.info("Daytona: restarted sandbox %s", self._sandbox.id)
|
logger.info("Daytona: restarted sandbox %s", self._sandbox.id)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue