85.1.15. pepsi-stage-discard

discard a message (a sink stage for staging)

Handbuchabschnitt:

1

85.1.15.1.1. Name

pepsi-stage-discard - die Discard-(Senken-)Stage der Pepsi-Pipeline.

85.1.15.1.2. Übersicht

pepsi-stage-discard [GLOBAL-OPTIONS] worker

85.1.15.1.3. Beschreibung

Diese Stage hat den Standardwert FUSION = yes: Wenn Stage-Fusion aktiviert ist ([pepsi] ALLOW_FUSION, der Standardwert) und diese Stage in das vereinheitlichte pepsi-Binärprogramm eingefaltet ist, kann ein Vorgänger sie in seinem eigenen Worker-Prozess ausführen, statt sie separat zu dispatchen. Siehe pepsi-dispatch(1) und pepsi.conf(5).

pepsi-stage-discard ist ein Stage-Programm, das von pepsi-dispatch(1) als persistenter Worker ausgeführt wird, der Nachrichten-IDs von der Standardeingabe liest. Es lädt diesen pepsi.workqueue-Datensatz (und weigert sich zu handeln, sofern sein status nicht running ist), liest seinen [stage-<stage>]-Abschnitt und verwirft dann die Nachricht: Der Datensatz wird gelöscht und dem Dispatcher als Erfolg gemeldet. Nichts wird irgendwohin weitergeleitet. Dies ist für Staging- und Test-Installationen gedacht — zum Beispiel eine Pipeline, die Ingress, Authentifizierung und die Stages durchspielt, ohne Mail ins Netzwerk zu bringen.

Das Verwerfen ist bewusst terminal: Es ignoriert NEXT_STAGE. Zwei Optionen formen, was — wenn überhaupt — das Verwerfen dem Absender zurückmeldet.

DISPOSITION wählt das simulierte Ergebnis: success (der Standardwert) behandelt die Nachricht als zugestellt, failure behandelt sie als dauerhaften Zustellfehler.

BOUNCE (Standardwert no) wählt, ob das Verwerfen überhaupt eine Delivery-Status-Notification (DSN) ausgeben darf. Wenn es darf, werden die DSN-Wünsche des Absenders stets beachtet, und zwar je Empfänger: NOTIFY wird jeweils zu einem RCPT angegeben, also wird es auch empfängerweise beantwortet. In beiden Fällen wird der Datensatz selbst stets gelöscht; ein Bericht ist eine Geschwister-Nachricht, die neben dieser Löschung erzeugt wird, eine je berichtbarem Empfänger, im selben einzelnen Datenbankaufruf (ihr Token ist das des Originals mit dem Suffix -discard<N>, sodass die Erzeugung höchstens einmal geschieht):

  • failure + BOUNCE = yes: Je Empfänger, dessen NOTIFY FAILURE anfordert (der Standardwert bei Abwesenheit), wird ein Geschwister-Datensatz zum BOUNCE_STAGE der Stage geroutet, das den Failure-Bounce erzeugt; NOTIFY=NEVER verwirft stillschweigend.

  • success + BOUNCE = yes: Ein positiver (Action: delivered-)Bericht wird auf dieselbe Weise erzeugt, aber nur, wenn das globale [pepsi]-ORIGINATE_SUCCESS_DSN aktiviert ist und das NOTIFY dieses Empfängers SUCCESS anfordert (Success hat keinen impliziten Standardwert).

  • Eine Nachricht, die bereits ein Bounce ist (der Null-Absender), erhält nie erneut einen Bounce und zieht auch nie einen Erfolgsbericht nach sich.

In jedem Fall, in dem keine DSN gerechtfertigt ist — BOUNCE = no, ein NOTIFY, das den relevanten Bericht nicht anfordert, eine Null-Absender-Nachricht oder kein verdrahtetes BOUNCE_STAGE —, wird der Datensatz einfach gelöscht, ohne dass etwas erzeugt wird.

85.1.15.1.4. Konfiguration

Die Optionen liegen im eigenen [stage-<name>]-Abschnitt der Stage (PROGRAM = pepsi-stage-discard): DISPOSITION (success/failure), BOUNCE (yes/no) und das BOUNCE_STAGE, zu dem die Geschwister-Berichte eines berichtbaren Verwerfens geroutet werden. Beide Stage-Optionen sind optional — ein Verwerfen ohne BOUNCE_STAGE löscht den Datensatz einfach. NEXT_STAGE wird ignoriert (ein Verwerfen ist terminal), und der Erfolgspfad konsultiert das gemeinsame [pepsi] ORIGINATE_SUCCESS_DSN-Flag. Alle sind in pepsi.conf(5) dokumentiert.

85.1.15.1.5. State

Eingaben: state.dsn — das notify/orcpt jedes Empfängers und das envid/ret auf Nachrichtenebene, verwendet, um empfängerweise zu entscheiden, ob (und wie) der Absender benachrichtigt wird.

Ausgaben: keine auf der Nachricht selbst, die stets gelöscht wird. Bei einem berichtbaren Verwerfen erhält jeder berichtbare Empfänger eine Geschwister-Nachricht bei BOUNCE_STAGE, die ein state.bounce-Objekt trägt (kind = permanent für einen Fehlschlag oder success für einen positiven Bericht, dazu diagnostic und der failed_recipient, über den berichtet wird), für pepsi-stage-bounce(1). Das State-Layout wird in pepsi.state(7) beschrieben.

Übergänge (getrieben von DISPOSITION, BOUNCE, dem NOTIFY jedes Empfängers und [pepsi] ORIGINATE_SUCCESS_DSN):

  • ein berichtbares Ergebnis — ein Fehlschlag (DISPOSITION = failure, BOUNCE = yes, NOTIFY, das Failure will) oder ein positiver Bericht (DISPOSITION = success, BOUNCE = yes, mit ORIGINATE_SUCCESS_DSN und NOTIFY=SUCCESS) — schließt den Datensatz ab und erzeugt je solchem Empfänger einen Geschwister-Datensatz bei BOUNCE_STAGE;

  • andernfalls → abschließen (der Datensatz wird gelöscht, nichts wird erzeugt).

NEXT_STAGE wird ignoriert (ein Verwerfen ist immer terminal); ein Null-Absender-Bounce erhält nie erneut einen Bounce. Die Stage schaltet nie weiter, pausiert nie und schlägt nie fehl.

85.1.15.1.6. Befehle

worker

Läuft als persistenter pepsi-dispatch(1)-Worker, der Nachrichten-IDs von der Standardeingabe liest.

85.1.15.1.7. Globale Optionen

-c FILE, –config FILE

Liest die Konfiguration aus FILE, statt die Standardorte zu durchsuchen.

-L LOGLEVEL, –log LOGLEVEL

Setzt die Log-Ausführlichkeit (Standardwert info).

-v, –verbose

Zeigt Log-Meldungen aus allen Quellen.

-h, –help; -V, –version

Gibt eine Verwendungsübersicht / die Version aus und beendet sich.

85.1.15.1.8. Exit-Status

Das Ergebnis jeder Nachricht wird pepsi-dispatch(1) auf der Statuszeile des Workers gemeldet, nicht als Exit-Status.

0

Der Worker lief, bis seine Standardeingabe geschlossen wurde.

1

Ein fataler Fehler ist aufgetreten (unlesbare Konfiguration, die Datenbank konnte nicht geöffnet werden, oder Standardein-/-ausgabe schlug fehl). Der Grund wird in das Journal geschrieben.

85.1.15.1.9. Beispiele

Nachricht 42 über einen einmaligen Worker verwerfen (sie muss running sein):

echo 42 | pepsi-stage-discard -c /etc/pepsi/pepsi.conf worker

Ein Staging-[stage-*]-Abschnitt, der alles still als zugestellt verwirft:

[stage-sink]
PROGRAM = pepsi-stage-discard
DISPOSITION = success

Ein Abschnitt, der dauerhaften Fehlschlag simuliert und einen Bounce erzeugt (unter Beachtung von NOTIFY):

[stage-sink]
PROGRAM = pepsi-stage-discard
DISPOSITION = failure
BOUNCE = yes
BOUNCE_STAGE = bounce

85.1.15.1.10. Siehe auch

pepsi-config(1), pepsi-stage-bounce(1), pepsi-stage-relay-to-internet(1), pepsi-stage-relay-to-smarthost(1), pepsi-dispatch(1), pepsi.conf(5), pepsi.state(7), pepsi-setup(1)

85.1.15.1.11. Fehler

Melden Sie Fehler an den Pepsi-Issue-Tracker.