fix sandbox create rollback gap

This commit is contained in:
Azamat 2026-04-03 02:18:54 +03:00
parent b4a2a9ceea
commit 9b6c7908ad
3 changed files with 94 additions and 3 deletions

View file

@ -107,7 +107,7 @@ class CreateSandbox:
'sandbox.new_container.id',
new_session.container_id,
)
self._repository.save(new_session)
self._save_created_session(new_session)
_set_active_count(self._metrics, self._repository)
if result == 'replaced':
span.set_attribute('session.id', str(new_session.session_id))
@ -131,6 +131,26 @@ class CreateSandbox:
span.record_error(exc)
raise
def _save_created_session(self, session: SandboxSession) -> None:
try:
self._repository.save(session)
except Exception as exc:
self._compensate_save_failure(session, exc)
raise
def _compensate_save_failure(
self,
session: SandboxSession,
error: Exception,
) -> None:
try:
self._runtime.stop(session.container_id)
except Exception as stop_error:
_set_active_count(self._metrics, self._repository)
raise error from stop_error
_set_active_count(self._metrics, self._repository)
class CleanupExpiredSandboxes:
def __init__(