Cestování workflow časem
Queuety může vrátit workflow k předchozímu kroku a obnovit vykonávání od tohoto místa. Hodí se, když krok vytvořil chybný výstup, když jej chcete zopakovat s jinou konfigurací nebo když potřebujete obnovit stav po poškození dat, aniž byste museli restartovat celé workflow.
Vrácení zpět závisí na protokolu událostí workflow. Pro cílový krok musí protokol událostí obsahovat data state_after.
Vrácení workflow zpět
PHP API
Zavolejte Queuety::rewind_workflow() s ID workflow a indexem kroku, ke kterému se chcete vrátit:
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 );
Parametr to_step je index kroku číslovaný od nuly, jehož dokončený stav se má obnovit. Vykonávání pokračuje následujícím krokem (to_step + 1).
CLI
wp queuety workflow rewind <id> <step>
| Možnost | Popis |
|---|---|
<id> |
ID pracovního postupu (povinné) |
<step> |
Index kroku, ke kterému se vrátit, od 0 (povinné) |
wp queuety workflow rewind 42 1
Jak to funguje
Když vrátíte workflow ke kroku N:
- V protokolu událostí se vyhledá hodnota
state_afterzaznamenaná po dokončení kroku N - Pokud žádný snímek stavu neexistuje, vyvolá se
RuntimeException - Řádek workflow se uzamkne
- Stav workflow se nahradí snímkem stavu a zachovají se všechny vyhrazené klíče (
_steps,_queue,_priorityatd.) z aktuálního řádku workflow - Nastaví se
current_stepna N + 1 astatusnarunning - Odstraní se všechna pole
error_messageafailed_at - Krok s indexem N + 1 se zařadí do fronty ke zpracování
- Zaznamená se událost protokolu
workflow_rewound
Pracovní proces poté převezme zařazený krok a workflow od tohoto bodu pokračuje jako obvykle.
Požadavky
Vrácení zpět vyžaduje data state_after v protokolu událostí. Pro každou událost step_completed se tato data zaznamenávají automaticky. Pokud byl protokol událostí pročištěn (pomocí WorkflowEventLog::prune()) a stav cílového kroku už neexistuje, vrácení zpět selže.
Zajistěte, aby doba uchovávání protokolu událostí pokrývala období, ke kterému se možná budete chtít vrátit.
Příklady použití
Oprava chybného obslužného programu kroku
Pokud měl obslužný program kroku chybu, která způsobila nesprávný výstup, můžete nasadit opravu a vrátit workflow zpět:
// 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 );
Opakování s jinou konfigurací
Pokud krok selhal kvůli vnějším vlivům (omezení rychlosti API, nesprávné přihlašovací údaje), opravte konfiguraci a spusťte jej znovu vrácením workflow:
// 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 );
Obnovení po chybných datech
Pokud dřívější krok vložil do stavu chybná data, vraťte se ke známému správnému snímku stavu:
// 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 );
Porovnání s opakováním
| Aspekt | retry_workflow() |
rewind_workflow() |
|---|---|---|
| Pokračuje od | Selhaného kroku | Libovolného předchozího kroku |
| Stav | Aktuální stav workflow | Obnoven z state_after protokolu událostí |
| Vyžaduje | Workflow má stav failed |
Snímek stavu cílového kroku v protokolu událostí |
| Stav poté | running |
running |
| Událost v protokolu | žádná | workflow_rewound |