raise occupied exception before creating workflow (#4126)

This commit is contained in:
LawyZheng
2025-11-28 13:14:04 +08:00
committed by GitHub
parent 0e7953f6d1
commit 3b265c7d87
2 changed files with 24 additions and 2 deletions

View File

@@ -777,8 +777,8 @@ class LLMCallerNotFoundError(SkyvernException):
class BrowserSessionAlreadyOccupiedError(SkyvernHTTPException):
def __init__(self, browser_session_id: str) -> None:
super().__init__(f"Browser session {browser_session_id} is already occupied")
def __init__(self, browser_session_id: str, runnable_id: str) -> None:
super().__init__(f"Browser session {browser_session_id} is already occupied by {runnable_id}")
class BrowserSessionNotRenewable(SkyvernException):

View File

@@ -21,6 +21,7 @@ from skyvern.constants import GET_DOWNLOADED_FILES_TIMEOUT, SAVE_DOWNLOADED_FILE
from skyvern.exceptions import (
BlockNotFound,
BrowserProfileNotFound,
BrowserSessionAlreadyOccupiedError,
BrowserSessionNotFound,
CannotUpdateWorkflowDueToCodeCache,
FailedToSendWebhook,
@@ -404,6 +405,27 @@ class WorkflowService:
workflow_request.proxy_location = workflow.proxy_location
if workflow_request.webhook_callback_url is None and workflow.webhook_callback_url is not None:
workflow_request.webhook_callback_url = workflow.webhook_callback_url
if workflow_request.browser_session_id:
persistent_browser_session = await app.DATABASE.get_persistent_browser_session(
workflow_request.browser_session_id, organization.organization_id
)
if persistent_browser_session is None:
LOG.warning(
"Failed to create workflow run, browser sesssion not found",
browser_session_id=workflow_request.browser_session_id,
)
raise BrowserSessionNotFound(workflow_request.browser_session_id)
if persistent_browser_session.runnable_id:
LOG.warning(
"Failed to create workflow run, browser session is already occupied",
browser_session_id=workflow_request.browser_session_id,
)
raise BrowserSessionAlreadyOccupiedError(
workflow_request.browser_session_id, persistent_browser_session.runnable_id
)
# Create the workflow run and set skyvern context
workflow_run = await self.create_workflow_run(
workflow_request=workflow_request,