INTEGRITY Dokumentace

Chyby

Třídy a kódy chyb vracené verzí Sandbox SDK 1.0 preview, se stručnými doporučenými kroky. Úplné postupy obnovy najdete v Chyby a zotavení.

Jak se vracejí chyby

Operace vyvolávají výjimky, které můžete zachytit. Upřednostněte instanceof u tříd z @cloudflare/sandbox. Použijte code a context pro metriky a stabilní přístup k polím.

import {
	ContainerUnavailableError,
	OperationInterruptedError,
	RPCTransportError,
} from "@cloudflare/sandbox";

try {
	await sandbox.exec(["npm", "test"], { cwd: "/workspace/app" });
} catch (error) {
	if (error instanceof ContainerUnavailableError) {
		// error.code === "CONTAINER_UNAVAILABLE"
		// error.context.reason, error.context.retryAfterMs
	}
	if (error instanceof OperationInterruptedError) {
		// Convenience getters: error.reason, error.retryable, error.operationName
		// admitted is only on context: error.context.admitted
	}
	if (error instanceof RPCTransportError) {
		// Convenience getters: error.kind, error.originalMessage
	}
}
import {
	ContainerUnavailableError,
	OperationInterruptedError,
	RPCTransportError,
} from "@cloudflare/sandbox";

try {
	await sandbox.exec(["npm", "test"], { cwd: "/workspace/app" });
} catch (error) {
	if (error instanceof ContainerUnavailableError) {
		// error.code === "CONTAINER_UNAVAILABLE"
		// error.context.reason, error.context.retryAfterMs
	}
	if (error instanceof OperationInterruptedError) {
		// Convenience getters: error.reason, error.retryable, error.operationName
		// admitted is only on context: error.context.admitted
	}
	if (error instanceof RPCTransportError) {
		// Convenience getters: error.kind, error.originalMessage
	}
}

Importy

Běžné chyby životního cyklu, procesů, terminálu a zálohování jsou dostupné přímo z kořene balíčku:

import {
	ContainerUnavailableError,
	OperationInterruptedError,
	RPCTransportError,
	StaleProcessHandleError,
	// ...
} from "@cloudflare/sandbox";
import {
	ContainerUnavailableError,
	OperationInterruptedError,
	RPCTransportError,
	StaleProcessHandleError,
	// ...
} from "@cloudflare/sandbox";

Celý modul také exportuje ErrorCode, SandboxError, createErrorFromResponse, a další doménové chyby (soubory, porty, interpret, připojené svazky a související typy kontextu):

import {
	ErrorCode,
	SandboxError,
	createErrorFromResponse,
	FileNotFoundError,
	// ...
} from "@cloudflare/sandbox/errors";
import {
	ErrorCode,
	SandboxError,
	createErrorFromResponse,
	FileNotFoundError,
	// ...
} from "@cloudflare/sandbox/errors";

Pomocné funkce platformy (ne SandboxError podtřídy):

import {
	isPlatformTransientError,
	isDurableObjectCodeUpdateReset,
} from "@cloudflare/sandbox";
import {
	isPlatformTransientError,
	isDurableObjectCodeUpdateReset,
} from "@cloudflare/sandbox";

SandboxError tvar

Většina chyb SDK dědí z SandboxError:

Člen Popis
name Název třídy (například ContainerUnavailableError)
message Zpráva čitelná pro člověka
code Stabilní ErrorCode řetězec (například CONTAINER_UNAVAILABLE)
context Strukturovaná pole pro typ chyby
httpStatus Namapovaný HTTP stav, pokud je k dispozici
operation Popisek operace, je-li uveden
suggestion Volitelný praktický návrh
timestamp Časové razítko ISO, pokud je uvedeno
toJSON() Serializuje pole chyby pro logy

RuntimeIdentityInactiveError rozšiřuje Error přímo (nikoli SandboxError). Znamená to, že aktuální kontejner už pro tento handle nebo volání není aktivní.

Tabulky obsahují Doporučená oprava sloupec. Podrobnější postupy obnovy najdete v Chyby a zotavení.

Chyby dostupnosti a chyby neshody nasazení jsou uvedeny v samostatných sekcích. Pro oba případy nepoužívejte stejnou smyčku opakování.


Dostupnost kontejneru a přerušená volání

Tyto chyby vznikají při běžném startu, zastavení kvůli nečinnosti, nahrazení nebo ztrátě spojení během probíhajícího volání.

Třída Kód Klíčový kontext Podrobnosti Doporučená oprava
ContainerUnavailableError CONTAINER_UNAVAILABLE reason, retryable: true, retryAfterMs? Kontejner nebyl připraven před zahájením operace. Počkejte s opakováním (dodržte retryAfterMs je-li nastavena), a poté zkuste stejný typ práce znovu.
OperationInterruptedError OPERATION_INTERRUPTED reason, operation, admitted, retryable Kontejner nebo sandbox se změnil poté, co operace pravděpodobně už začala. Přečtěte si reason a retryable. Před opakováním operace, která mění stav, zkontrolujte stav sandboxu nebo aplikace.
RPCTransportError RPC_TRANSPORT_ERROR kind, originalMessage, errorName, closeCode? SDK ztratilo spojení s kontejnerem během volání. Pozdější volání může fungovat. Toto volání již mohlo něco změnit.
RuntimeIdentityInactiveError , , Aktuální kontejner již není aktivní pro toto volání nebo handle. Prostý Error, nikoli SandboxError. Zkontrolujte, zda prostředek stále existuje; pokud ne, spusťte práci znovu z uloženého stavu.

ContainerUnavailableError důvodů

context.reason:

Důvod Význam
container_starting Kontejner se stále spouští
container_unhealthy Kontejner není zdravý
container_replaced Kontejner byl nahrazen
rpc_upgrade_failed Nepodařilo se navázat komunikaci s kontejnerem

OperationInterruptedError důvodů

reason / context.reason:

Důvod Význam
runtime_replaced Podkladová instance kontejneru byla nahrazena
container_stopped Kontejner zastaven
transport_disposed Komunikační relace byla zrušena
sandbox_destroyed Sandbox byl zničen
sandbox_lifetime_changed Konfigurace životnosti sandboxu se změnila
recovery_exhausted Pokusy o obnovení byly vyčerpány
unknown Neklasifikované přerušení

Pohodlné gettery na chybě: reason, retryable, a operationName. Další pole, například admitted, operationId, phase, a metadata související se zálohováním se nacházejí na error.context pouze (admitted je true | "unknown").

RPCTransportError typy

kind / context.kind:

Typ Význam
peer_closed Protistrana ukončila spojení
connection_failed Připojení se nezdařilo
upgrade_failed Navázání připojení se nezdařilo
invalid_frame Neočekávaný rámec
protocol_error Rámec odmítnutý protokolem
session_disposed Relace byla uvolněna
unknown Neklasifikované selhání

Neshoda mezi Workerem a image kontejneru

Tato selhání obvykle znamenají, že si balíček Workeru a image kontejneru neodpovídají, že se image nepodařilo spustit, nebo že metadata nastavení neodpovídají tomu, co očekává SDK. Opravte nasazení. Neberte je jako pomalý start kontejneru.

Nasaďte balíček Workeru a image kontejneru sandboxu ze stejné @cloudflare/sandbox@next řádek. Preview Worker se stabilním obrazem (nebo naopak) zde často selže.

Třída Kód Klíčový kontext Podrobnosti Doporučená oprava
RuntimeControlProtocolError INTERNAL_ERROR reason Mezi Workerem a kontejnerem se nepodařilo dokončit nastavení (neshoda metadat nebo protokolu). Kód je sdílený INTERNAL_ERROR hodnotu, tuto třídu identifikujte pomocí instanceof RuntimeControlProtocolError nebo spárováním code === "INTERNAL_ERROR" hodnotou context.reason. Nasaďte balíček Workeru a image kontejneru ze stejné vydávací větve. V případě potřeby opravte konfiguraci.

RuntimeControlProtocolError důvodů

context.reason:

Důvod Význam Poznámky
unsupported-protocol-version Verze protokolu Workeru a kontejneru si neodpovídají Balíček Workeru a image kontejneru nejsou ze stejného vydání
missing-metadata V kontejneru chybí povinná metadata pro nastavení Vadný nebo neúplný obraz/sestavení
malformed-metadata Metadata nastavení se nepodařilo zpracovat Vadný nebo neúplný obraz/sestavení
activation-mismatch Aktivace neodpovídala očekávanému kontejneru Může se objevit po výměně kontejneru; pokud se to opakuje, zkontrolujte spárování Worker a obrazu kontejneru

Následující trvalé problémy spolu souvisejí a vracejí stejnou odpověď:

Problém Doporučená oprava
Chybný nebo chybějící obraz kontejneru v wrangler / registry Nasaďte balíček Workeru a image kontejneru ze stejné vydávací větve. V případě potřeby opravte konfiguraci.
Kontejner skončí dříve, než je připraven Opravte image nebo entrypoint a znovu nasaďte aplikaci. Nespoléhejte jen na opakování volání aplikace.
Limity kapacity účtu nebo lokality Viz Limity kapacity v produkci

Proces

Třída Kód Klíčový kontext Podrobnosti Doporučená oprava
ProcessNotFoundError PROCESS_NOT_FOUND processId Neznámé ID procesu v aktuálním kontejneru. Použijte správné ID, nebo proces spusťte znovu z uloženého stavu.
StaleProcessHandleError STALE_PROCESS_HANDLE processId, pid, operation Handle nebo ID z předchozího kontejneru. Práci spusťte znovu z uloženého stavu. Starý úchyt znovu nepoužívejte.
ProcessSpawnFailedError PROCESS_SPAWN_FAILED processId, command, cwd?, stderr? Proces se nepodařilo spustit. Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte.
InvalidProcessCwdError INVALID_PROCESS_CWD cwd, reason Neplatný pracovní adresář. Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte.
InvalidProcessEnvironmentError INVALID_PROCESS_ENVIRONMENT name?, reason Neplatná překryvná vrstva prostředí. Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte.
InvalidProcessCursorError INVALID_PROCESS_CURSOR processId, cursor?, reason Neplatný kurzor logu. Opravte kurzor nebo ostatní argumenty. Stejnou neplatnou hodnotu neopakujte.
ProcessWaitTimeoutError PROCESS_WAIT_TIMEOUT processId, operation, timeout Lokální output, waitForExit, nebo waitForLog vypršel časový limit. Čekání skončilo. Proces nebo terminál přitom může stále běžet.
ProcessAbortedError PROCESS_ABORTED processId, operation Lokální AbortSignal ukončil čekání nebo stream. Čekání skončilo. Proces nebo terminál přitom může stále běžet.
ProcessReadyTimeoutError PROCESS_READY_TIMEOUT processId, command, condition, timeout Čekání na připravenost vypršelo. Než spustíte další proces, zkontrolujte, zda ten předchozí stále běží.
ProcessExitedBeforeReadyError PROCESS_EXITED_BEFORE_READY processId, command, condition, exitCode Proces skončil dříve, než byl připravený. Opravte příkaz nebo prostředí a v případě potřeby akci spusťte znovu.
ProcessExitedBeforeLogError PROCESS_EXITED_BEFORE_LOG processId, pid, exit Proces skončil dříve, než došlo ke shodě v protokolu. Opravte příkaz nebo prostředí a v případě potřeby akci spusťte znovu.
ProcessError PROCESS_ERROR processId, pid?, exitCode?, stderr? Obecné selhání procesu. Před opakováním operace, která mění stav, zkontrolujte stav sandboxu nebo aplikace.

getProcess a listProcesses a vrátí null nebo [] není chyba.


Terminál

Třída Kód Klíčový kontext Podrobnosti Doporučená oprava
TerminalNotFoundError TERMINAL_NOT_FOUND terminalId Neznámé ID terminálu v aktuálním kontejneru. Použijte správné ID, nebo terminál spusťte znovu z uloženého stavu.
StaleTerminalHandleError STALE_TERMINAL_HANDLE terminalId, operation Handle nebo ID z předchozího kontejneru. Práci spusťte znovu z uloženého stavu. Starý úchyt znovu nepoužívejte.
InvalidTerminalCwdError INVALID_TERMINAL_CWD terminalId, cwd, reason Neplatný pracovní adresář při vytvoření. Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte.
InvalidTerminalCursorError INVALID_TERMINAL_CURSOR terminalId, cursor?, reason Neplatný kurzor výstupu. Opravte kurzor nebo ostatní argumenty. Stejnou neplatnou hodnotu neopakujte.
TerminalControlError TERMINAL_CONTROL_ERROR terminalId, operation, reason? Nezdařilo se přerušení, ukončení, změna velikosti nebo související řídicí operace. Před opakováním operace, která mění stav, zkontrolujte stav sandboxu nebo aplikace.

getTerminal a listTerminals a vrátí null nebo [] není chyba.


Záloha

Třída Kód Podrobnosti Doporučená oprava
BackupCreateError BACKUP_CREATE_FAILED Vytvoření zálohy selhalo. Zkontrolujte podrobnosti chyby; pokud jsou možnosti neplatné, opravte je.
BackupRestoreError BACKUP_RESTORE_FAILED Obnova ze zálohy selhala. Zkontrolujte podrobnosti chyby; pokud jsou možnosti neplatné, opravte je.
BackupNotFoundError BACKUP_NOT_FOUND Neznámé ID zálohy. Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte.
BackupExpiredError BACKUP_EXPIRED Platnost zálohy vypršela. Opravte možnosti, nebo vytvořte novou zálohu.
InvalidBackupConfigError INVALID_BACKUP_CONFIG Neplatné možnosti zálohy. Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte.

Ostatní domény

Tyto třídy jsou dostupné z @cloudflare/sandbox/errors (a některé pomocné nástroje pro připojení z kořenového adresáře balíčku). Podrobnosti si ověřte podle svého nainstalovaného balíčku. Ne všechny specifické návody pro jednotlivé domény jsou již zveřejněny.

Doména Příklady Doporučená oprava
Souborový systém FileNotFoundError, FileExistsError, PermissionDeniedError, FileTooLargeError, FileSystemError Opravte cestu nebo ošetřete chybějící soubor.
Porty / náhled PortAlreadyExposedError, PortNotExposedError, InvalidPortError, PortInUseError, ServiceNotRespondingError, CustomDomainRequiredError Opravte možnosti portu nebo nastavení expose.
Interpreter (rozšíření) InterpreterNotReadyError, ContextNotFoundError, CodeExecutionError Pokud interpret ještě není připravený, počkejte a zkuste to znovu. V opačném případě opravte požadavek.
Připojení BucketMountError, BucketUnmountError, S3FSMountError, MissingCredentialsError, InvalidMountConfigError Opravte možnosti připojení nebo přihlašovací údaje.
Validace ValidationFailedError Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte.

Další třídy domén mohou existovat na @cloudflare/sandbox/errors v nainstalovaném balíčku. Než se spolehnete na nezdokumentované rozhraní, ověřte si ho v tomto balíčku.

Chyby související s připojením jsou také exportovány z @cloudflare/sandbox vedle API pro připojení.


Pomocné funkce platformy

Pomocník Podrobnosti Doporučená oprava
isPlatformTransientError(error) Platí pro některé přechodné signály platformy (například ztrátu připojení, určitá obnovení úložiště Durable Object při startu nebo chyby platformy, které lze opakovat). Upřednostněte nový požadavek nebo operaci.
isDurableObjectCodeUpdateReset(error) Platí, pokud byl izolát Durable Object nahrazen aktualizací kódu nebo nasazením. Nezkoušejte to opakovaně v rámci téhož požadavku. Nechte nový požadavek proběhnout na novém izolátu.

Tyto pomocné funkce doplňují SandboxError podtřídy. Nenahrazují pravidla obnovy platná pro Chyby a zotavení.


Limity kapacity v produkci

V produkčním prostředí může platforma Containers odmítnout úlohu, pokud jsou překročeny limity účtu nebo nasazení (například SURPASSED_BASE_LIMITS, SURPASSED_TOTAL_LIMITS, LOCATION_SURPASSED_BASE_LIMITS). Opakování stejného přetížení problém nevyřeší. Snižte souběžnost, zvyšte limity nebo přepněte na operátorský postup. Tyto limity se obvykle neprojeví v lokálním wrangler dev.

Viz Limity platformy.