worker_exhausted
HTTP 500 · code: "worker_exhausted" · type: https://docs.formfeed.dev/errors/worker-exhausted
Etwas ist auf Seiten von Formfeed fehlgeschlagen, und es ist kein Problem Ihrer Anfrage. Das kommt auf zwei Wegen vor:
- Ein asynchrones Rendering hat keine Versuche mehr. Die Warteschlange wiederholt ein Rendering, das auf Seiten von Formfeed fehlschlägt (eine Zeitüberschreitung, ein ausgelasteter Dienst, ein unerwarteter Fehler), noch zweimal, 5 und dann 10 Sekunden später. Schlägt auch der dritte Versuch fehl, endet das Rendering mit diesem Code, und
detail(messageimerrordes Renderings) behält, was der letzte Versuch gemeldet hat. Daserrordes Renderings hat außerdemattempts. - Die API hatte einen unerwarteten Fehler, bevor es ein Rendering gab, etwa weil die Datenbank nicht antwortete oder das Brand Kit sich nicht lesen ließ.
detaillautet dann Unexpected error.
Ein fehlgeschlagenes Rendering kostet nichts.
Beispiel
GET /v1/renders/{id}/result eines asynchronen Renderings, das dreimal die Zeit überschritten hat:
{
"type": "https://docs.formfeed.dev/errors/worker-exhausted",
"title": "Render retries exhausted",
"status": 500,
"detail": "Render exceeded 30000 ms",
"code": "worker_exhausted",
"location": null,
"render_id": "rnd_7da09ab6cd9946b798c187c2a9350852",
"request_id": "req_4b7c1e9a2f3d4c5b8a6e7f9012"
}
Dasselbe Rendering in GET /v1/renders/{id} und im Webhook render.failed:
"error": { "code": "worker_exhausted", "message": "Render exceeded 30000 ms", "attempts": 3 }
Häufige Ursachen
- Ein Rendering, das jedes Mal die Zeit überschreitet, etwa wegen eines langsamen Bildservers: Die letzte Meldung ist Render exceeded 30000 ms. Das ist eher ein Problem der Vorlage oder ihrer Dateien als von Formfeed; siehe
render_timeout. - Der Office-Konverter oder der Konformitätsdienst war bei allen drei Versuchen nicht verfügbar.
- Ein Infrastrukturproblem: ein abgestürzter Browser, ein Speicherfehler.
- Ein unerwarteter Fehler in der API.
So beheben Sie es
- Lesen Sie
detail: Nennt es eine Zeitüberschreitung, beheben Sie sie wie unterrender_timeoutbeschrieben; eine Wiederholung hilft dann nicht. - Sonst wiederholen Sie die Anfrage später.
- Tritt der Fehler weiter auf, prüfen Sie status.formfeed.dev und senden Sie die
request_id(und dierender_id, falls vorhanden) an support@formfeed.dev.
Wiederholen?
Ja, mit wachsenden Pausen (etwa nach 5, 30 und 120 Sekunden). Bei einer Antwort 500 auf Ihre Anfrage verwenden Sie denselben Idempotency-Key: Solche Antworten werden nicht unter dem Schlüssel gespeichert, jede Wiederholung läuft also wirklich. Bei einem asynchronen Rendering, das später fehlgeschlagen ist, senden Sie die Anfrage mit einem neuen Idempotency-Key: Die erste Antwort auf den alten Schlüssel, die 202 mit dem fehlgeschlagenen Rendering, ist 24 Stunden gespeichert und käme wieder. Diese Antwort hat keinen Header Retry-After, und die SDKs wiederholen sie nicht von selbst.