Zum Hauptinhalt springen

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 (message im error des Renderings) behält, was der letzte Versuch gemeldet hat. Das error des Renderings hat außerdem attempts.
  • 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ß. detail lautet 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 unter render_timeout beschrieben; 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 die render_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.