terminate self and reclaim when claim failed (#3753)

This commit is contained in:
LawyZheng
2025-10-17 18:24:13 +08:00
committed by GitHub
parent 800022993d
commit 87decd6b77
2 changed files with 36 additions and 5 deletions

View File

@@ -1,10 +1,25 @@
from datetime import datetime from datetime import datetime
from enum import StrEnum
from pydantic import BaseModel, ConfigDict from pydantic import BaseModel, ConfigDict
from skyvern.schemas.runs import ProxyLocation from skyvern.schemas.runs import ProxyLocation
FINAL_STATUSES = ("completed", "failed")
class PersistentBrowserSessionStatus(StrEnum):
created = "created"
running = "running"
failed = "failed"
completed = "completed"
timeout = "timeout"
retry = "retry"
FINAL_STATUSES = (
PersistentBrowserSessionStatus.completed,
PersistentBrowserSessionStatus.failed,
PersistentBrowserSessionStatus.timeout,
)
def is_final_status(status: str | None) -> bool: def is_final_status(status: str | None) -> bool:

View File

@@ -11,7 +11,11 @@ from skyvern.config import settings
from skyvern.exceptions import BrowserSessionNotRenewable, MissingBrowserAddressError from skyvern.exceptions import BrowserSessionNotRenewable, MissingBrowserAddressError
from skyvern.forge.sdk.db.client import AgentDB from skyvern.forge.sdk.db.client import AgentDB
from skyvern.forge.sdk.db.polls import wait_on_persistent_browser_address from skyvern.forge.sdk.db.polls import wait_on_persistent_browser_address
from skyvern.forge.sdk.schemas.persistent_browser_sessions import PersistentBrowserSession, is_final_status from skyvern.forge.sdk.schemas.persistent_browser_sessions import (
PersistentBrowserSession,
PersistentBrowserSessionStatus,
is_final_status,
)
from skyvern.schemas.runs import ProxyLocation from skyvern.schemas.runs import ProxyLocation
from skyvern.webeye.browser_factory import BrowserState from skyvern.webeye.browser_factory import BrowserState
@@ -61,13 +65,19 @@ async def validate_session_for_renewal(
) )
raise BrowserSessionNotRenewable("Browser session has not started yet", session_id) raise BrowserSessionNotRenewable("Browser session has not started yet", session_id)
if browser_session.status != "created": if browser_session.status not in [
PersistentBrowserSessionStatus.created,
PersistentBrowserSessionStatus.retry,
PersistentBrowserSessionStatus.running,
]:
LOG.warning( LOG.warning(
"Attempted to renew browser session that is not in the 'created' state", "Attempted to renew browser session that is not in the 'created', 'retry' or 'running' state",
browser_session_id=session_id, browser_session_id=session_id,
organization_id=organization_id, organization_id=organization_id,
) )
raise BrowserSessionNotRenewable("Browser session is not in the 'created' state", session_id) raise BrowserSessionNotRenewable(
"Browser session is not in the 'created', 'retry' or 'running' state", session_id
)
started_at_utc = ( started_at_utc = (
browser_session.started_at.replace(tzinfo=timezone.utc) browser_session.started_at.replace(tzinfo=timezone.utc)
@@ -141,6 +151,12 @@ async def update_status(
) )
return None return None
LOG.info(
"Updating browser session status",
browser_session_id=session_id,
organization_id=organization_id,
browser_status=status,
)
persistent_browser_session = await db.update_persistent_browser_session( persistent_browser_session = await db.update_persistent_browser_session(
session_id, session_id,
status=status, status=status,