Călătorie în timp în fluxurile de lucru
Queuety poate derula un flux de lucru înapoi la un pas anterior și poate relua execuția din acel punct. Acest lucru este util când un pas a produs rezultate incorecte, când doriți să reîncercați cu o configurație diferită sau când trebuie să recuperați date corupte fără să reporniți întregul flux de lucru.
Derularea înapoi se bazează pe Jurnalul de evenimente al fluxului de lucru. Jurnalul de evenimente trebuie să conțină state_after pentru pasul țintă.
Derularea înapoi a unui flux de lucru
PHP API
Apelați Queuety::rewind_workflow() cu ID-ul fluxului de lucru și indexul pasului la care doriți să reveniți:
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 );
Parametrul to_step este indexul de la 0 al pasului a cărui stare încheiată trebuie restaurată. Execuția se reia de la pasul următor (to_step + 1).
CLI
wp queuety workflow rewind <id> <step>
| Opțiune | Descriere |
|---|---|
<id> |
ID-ul fluxului de lucru (obligatoriu) |
<step> |
Indexul pasului la care se revine, numerotat de la 0 (obligatoriu) |
wp queuety workflow rewind 42 1
Cum funcționează
Când derulați un flux de lucru înapoi la pasul N:
- Jurnalul de evenimente este interogat pentru valoarea
state_afterînregistrată după finalizarea pasului N - Dacă nu există niciun instantaneu, se aruncă o
RuntimeException - Rândul fluxului de lucru este blocat
- Starea fluxului de lucru este înlocuită cu instantaneul, păstrând toate cheile rezervate (
_steps,_queue,_priorityetc.) din rândul curent al fluxului de lucru current_stepeste setat la N + 1, iarstatuseste setat larunning- Câmpurile
error_messageșifailed_atsunt șterse - Pasul de la indexul N + 1 este pus în coadă pentru procesare
- Este înregistrat un eveniment de jurnal
workflow_rewound
Apoi, lucrătorul preia pasul pus în coadă, iar fluxul de lucru continuă normal din acel punct.
Cerințe
Revenirea necesită date state_after în jurnalul de evenimente. Jurnalul de evenimente le înregistrează automat pentru fiecare eveniment step_completed. Dacă jurnalul de evenimente a fost curățat (prin WorkflowEventLog::prune()), iar starea pentru pasul țintă nu mai există, revenirea va eșua.
Asigurați-vă că perioada de păstrare a jurnalului de evenimente acoperă intervalul la care ați putea avea nevoie să reveniți.
Cazuri de utilizare
Remediați un handler de pas cu probleme
Dacă un handler de pas a avut o eroare care a produs rezultate incorecte, puteți implementa remedierea și reveni:
// 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 );
Reîncercați cu o configurație diferită
Când un pas a eșuat din cauza unor factori externi (API limită de rată, acreditări incorecte), remediați configurația și reveniți pentru a-l executa din nou:
// 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 );
Recuperați-vă după date incorecte
Dacă un pas anterior a introdus date incorecte în stare, reveniți la un instantaneu valid cunoscut:
// 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 );
Comparație cu reîncercarea
| Aspect | retry_workflow() |
rewind_workflow() |
|---|---|---|
| Reia de la | Pasul eșuat | Orice pas anterior |
| Stare | Starea curentă a fluxului de lucru | Restaurată din jurnalul de evenimente state_after |
| Necesită | Fluxul de lucru are starea failed |
Instantaneul din jurnalul de evenimente pentru pasul țintă |
| Stare după | running |
running |
| Eveniment de jurnal | niciunul | workflow_rewound |