78. pepsi-failure-bouncer

Leitet fehlgeschlagene/Timeout-Nachrichten an die Bounce-Stage.

78.1. Rolle

Eine Nachricht in der Pipeline nach dem Ingress endet als failed (eine Stage gab einen dauerhaften Fehler, oder ihr Worker stürzte ab) oder timeout (ein Worker überschritt [pepsi-dispatch] MAX_RUNTIME), wenn ihre Stage aufgibt. Der Dispatcher reiht einen solchen Datensatz nie erneut ein, sodass die Nachricht ohne Operator-Eingriff in pepsi.workqueue steckenbleibt und der Absender nie benachrichtigt wird.

pepsi-failure-bouncer verschiebt jede steckengebliebene Nachricht zum konfigurierten [pepsi-failure-bouncer] BOUNCE_STAGE und setzt sie auf pending zurück, sodass der Dispatcher die Bounce-Stage (pepsi-stage-bounce) ausführt, die — gemäß dem RFC-3461-NOTIFY des Absenders — eine Zustellungsstatusbenachrichtigung ausgibt. Eine bereits an der Bounce-Stage befindliche Nachricht wird in Ruhe gelassen, sodass ein Bounce, der an dieser Stage fehlschlägt, nicht in eine Schleife gerät; einer, der nach ihr fehlschlägt (eine nicht weiterleitbare Null-Absender-DSN), wird zurückverschoben und einfach verworfen (ein Bounce wird nie erneut gebounct).

Es verbindet sich über [pepsi-postgres] und wird durch [pepsi-failure-bouncer] konfiguriert, dessen BOUNCE_STAGE erforderlich ist (es ist die gesamte Konfiguration: die Stage, zu der steckengebliebene Nachrichten verschoben werden). Es ist keine Stage. Als root gestartet, läuft es vor dem Verbinden als Dienstkonto pepsi weiter — der Rolle, der die Warteschlange gehört. Referenz: pepsi-failure-bouncer(1).

78.2. Modi

  • service (der Standardwert, kein --once) — ein langlebiger Prozess, der den Kanal workqueue_failed mit LISTEN abhört (ausgelöst vom Trigger workqueue_failed_notify, wann immer ein Datensatz failed/timeout wird) und jede Nachricht bouncet, sobald sie eintrifft. Er fegt alle bereits steckengebliebenen Nachrichten beim Start und bei jeder Wiederverbindung durch, sodass nichts übersehen wird, und läuft bis SIGINT/SIGTERM.

  • –once — die derzeit steckengebliebenen Nachrichten einmalig durchfegen und sich beenden (ein manueller Operator-Lauf oder ein Cron-Job).

--failed-only / --timeout-only beschränken einen der beiden Modi auf einen der beiden terminalen Zustände.

78.3. Siehe auch

pepsi-dispatch, pepsi-stage-bounce, pepsi-queue, pepsi-status, pepsi-failure-bouncer(1), pepsi.conf(5).