Potovanje skozi čas v potekih dela
Queuety lahko potek dela vrne na prejšnji korak in nadaljuje izvajanje od te točke. To je uporabno, kadar je korak ustvaril napačen izhod, kadar ga želite ponoviti z drugačno konfiguracijo ali kadar morate obnoviti potek dela po poškodbi podatkov, ne da bi ga začeli znova od začetka.
Vračanje v prejšnje stanje je odvisno od Dnevnika dogodkov poteka dela. Dnevnik dogodkov mora vsebovati podatke state_after za ciljni korak.
Vrnitev poteka dela v prejšnje stanje
PHP API
Pokličite Queuety::rewind_workflow() z ID-jem poteka dela in indeksom koraka, na katerega se želite vrniti:
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 );
Parameter to_step je indeks koraka, štet od nič, katerega dokončano stanje je treba obnoviti. Izvajanje se nadaljuje z naslednjim korakom (to_step + 1).
CLI
wp queuety workflow rewind <id> <step>
| Možnost | Opis |
|---|---|
<id> |
ID poteka dela (obvezno) |
<step> |
Indeks koraka, na katerega želite povrniti potek, od 0 naprej (obvezno) |
wp queuety workflow rewind 42 1
Kako deluje
Ko potek dela vrnete na korak N:
- V dnevniku dogodkov se poišče vrednost
state_after, zabeležena po dokončanju koraka N - Če posnetek stanja ne obstaja, se sproži
RuntimeException - Vrstica poteka dela se zaklene
- Stanje poteka dela se nadomesti s posnetkom stanja, pri čemer se ohranijo vsi rezervirani ključi (
_steps,_queue,_priorityitd.) iz trenutne vrstice poteka dela current_stepse nastavi na N + 1,statuspa narunning- Vsa polja
error_messageinfailed_atse počistijo - Korak z indeksom N + 1 se uvrsti v čakalno vrsto za obdelavo
- Zabeleži se dogodek dnevnika
workflow_rewound
Delavec nato prevzame korak, dodan v čakalno vrsto, in potek dela se od te točke naprej nadaljuje kot običajno.
Zahteve
Za vrnitev na prejšnje stanje so potrebni podatki state_after v dnevniku dogodkov. Dnevnik jih samodejno zabeleži za vsak dogodek step_completed. Če je bil dnevnik dogodkov skrajšan (prek WorkflowEventLog::prune()) in stanje za ciljni korak ne obstaja več, vrnitev na prejšnje stanje ne bo uspela.
Poskrbite, da hramba dnevnika dogodkov zajema obdobje, na katero se boste morda morali vrniti.
Primeri uporabe
Popravite napačno delujoč obravnavalnik koraka
Če je imel obravnavalnik koraka napako, zaradi katere je ustvaril napačen izhod, lahko uvedete popravek in se vrnete na prejšnje stanje:
// 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 );
Ponovni poskus z drugačno konfiguracijo
Če korak ni uspel zaradi zunanjih dejavnikov (API omejitev hitrosti, napačni poverilnici), popravite konfiguracijo in se vrnite na prejšnje stanje za ponovni zagon:
// 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 );
Obnovitev po napačnih podatkih
Če je prejšnji korak v stanje vstavil napačne podatke, se vrnite na znan dober posnetek stanja:
// 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 );
Primerjava s ponovnim poskusom
| Vidik | retry_workflow() |
rewind_workflow() |
|---|---|---|
| Nadaljuje od | Neuspešni korak | Kateri koli prejšnji korak |
| Stanje | Trenutno stanje poteka dela | Obnovljeno iz dnevnika dogodkov state_after |
| Zahteva | Potek dela je v stanju failed |
Posnetek dnevnika dogodkov za ciljni korak |
| Stanje po dejanju | running |
running |
| Dogodek dnevnika | brez | workflow_rewound |