Workflow-Zeitreise
Queuety kann einen Workflow auf einen früheren Schritt zurücksetzen und die Ausführung von dort fortsetzen. Das ist nützlich, wenn ein Schritt eine fehlerhafte Ausgabe erzeugt hat, du es mit einer anderen Konfiguration erneut versuchen möchtest oder beschädigte Daten beheben musst, ohne den gesamten Workflow neu zu starten.
Das Zurücksetzen stützt sich auf das Workflow-Ereignisprotokoll. Für den Zielschritt muss das Ereignisprotokoll state_after-Daten enthalten.
Einen Workflow zurücksetzen
PHP API
Rufe Queuety::rewind_workflow() mit der Workflow-ID und dem Index des Schritts auf, zu dem du zurücksetzen möchtest:
use Queuety\Queuety;
// Rewind workflow 42 to step 1.
// The state is restored to the snapshot taken after step 1 completed,
// and step 2 is enqueued for re-execution.
Queuety::rewind_workflow( $workflow_id, to_step: 1 );
Der Parameter to_step ist der nullbasierte Index des Schritts, dessen abgeschlossener Zustand wiederhergestellt werden soll. Die Ausführung wird mit dem nächsten Schritt fortgesetzt (to_step + 1).
CLI
wp queuety workflow rewind <id> <step>
| Option | Beschreibung |
|---|---|
<id> |
Workflow-ID (erforderlich) |
<step> |
Schrittindex, auf den zurückgesetzt werden soll, beginnend bei 0 (erforderlich) |
wp queuety workflow rewind 42 1
So funktioniert es
Wenn du einen Workflow auf Schritt N zurücksetzt:
- Wird das Ereignisprotokoll nach dem
state_after-Wert abgefragt, der nach Abschluss von Schritt N aufgezeichnet wurde - Wird ein
RuntimeExceptionausgelöst, wenn kein Snapshot vorhanden ist - Wird die Workflow-Zeile gesperrt
- Wird der Workflow-Zustand durch den Snapshot ersetzt, wobei alle reservierten Schlüssel (
_steps,_queue,_priorityusw.) aus der aktuellen Workflow-Zeile erhalten bleiben - Wird
current_stepauf N + 1 undstatusaufrunninggesetzt - Werden alle Felder
error_messageundfailed_atgeleert - Wird der Schritt mit Index N + 1 zur Verarbeitung eingereiht
- Wird ein
workflow_rewound-Protokollereignis aufgezeichnet
Anschließend übernimmt der Worker den eingereihten Schritt und der Workflow läuft ab diesem Punkt wie gewohnt weiter.
Voraussetzungen
Zum Zurücksetzen werden state_after-Daten im Ereignisprotokoll benötigt. Das Ereignisprotokoll zeichnet sie automatisch für jedes step_completed-Ereignis auf. Wurde das Ereignisprotokoll bereinigt (über WorkflowEventLog::prune()) und ist der Zustand des Zielschritts nicht mehr vorhanden, schlägt das Zurücksetzen fehl.
Stelle sicher, dass die Aufbewahrungsdauer deines Ereignisprotokolls den Zeitraum abdeckt, auf den du möglicherweise zurücksetzen musst.
Anwendungsfälle
Einen fehlerhaften Schritt-Handler korrigieren
Wenn ein Schritt-Handler aufgrund eines Fehlers falsche Ausgaben erzeugt hat, kannst du den Fix bereitstellen und den Workflow zurücksetzen:
// Step 2 (CallLLMHandler) produced garbled output due to a prompt bug.
// After fixing CallLLMHandler, rewind to step 1 so step 2 runs again
// with the corrected handler.
Queuety::rewind_workflow( $workflow_id, to_step: 1 );
Mit einer anderen Konfiguration erneut versuchen
Wenn ein Schritt aufgrund externer Faktoren fehlgeschlagen ist (API-Ratenbegrenzung, ungültige Zugangsdaten), korrigiere die Konfiguration und setze den Workflow zurück, um den Schritt erneut auszuführen:
// Step 3 failed because the API key was expired.
// After updating the key, rewind to step 2 so step 3 retries.
Queuety::rewind_workflow( $workflow_id, to_step: 2 );
Fehlerhafte Daten wiederherstellen
Wenn ein früherer Schritt fehlerhafte Daten in den Zustand eingebracht hat, setze den Workflow auf einen bekannten gültigen Snapshot zurück:
// Step 0 fetched correct data, but step 1 corrupted it.
// Rewind to step 0 to restore the good state and re-run step 1.
Queuety::rewind_workflow( $workflow_id, to_step: 0 );
Vergleich mit erneutem Versuch
| Aspekt | retry_workflow() |
rewind_workflow() |
|---|---|---|
| Fortsetzung ab | Fehlgeschlagenem Schritt | Beliebigem vorherigen Schritt |
| Zustand | Aktueller Workflow-Zustand | Aus dem Ereignisprotokoll wiederhergestellt state_after |
| Voraussetzung | Workflow hat den Status failed |
Snapshot des Ereignisprotokolls beim Zielschritt |
| Status danach | running |
running |
| Protokollereignis | keines | workflow_rewound |