Kelionė laiku darbo eigoje
Queuety gali grąžinti darbo eigą į ankstesnį žingsnį ir tęsti vykdymą nuo tos vietos. Tai naudinga, jei žingsnis pateikė netinkamą rezultatą, norite bandyti dar kartą su kita konfigūracija arba reikia atkurti darbo eigą po duomenų sugadinimo nepaleidžiant visos darbo eigos iš naujo.
Grąžinimas į ankstesnį žingsnį priklauso nuo Darbo eigos įvykių žurnalo. Įvykių žurnale turi būti state_after duomenų apie tikslinį žingsnį.
Darbo eigos grąžinimas į ankstesnį žingsnį
PHP API
Iškvieskite Queuety::rewind_workflow(), nurodydami darbo eigos ID ir žingsnio, į kurį norite grįžti, indeksą:
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 );
Parametras to_step yra nulinį indeksą turintis žingsnio, kurio užbaigtą būseną reikia atkurti, indeksas. Vykdymas tęsiamas nuo kito žingsnio (to_step + 1).
CLI
wp queuety workflow rewind <id> <step>
| Parinktis | Aprašymas |
|---|---|
<id> |
Darbo eigos ID (privalomas) |
<step> |
Žingsnio, į kurį grąžinama, indeksas, skaičiuojamas nuo 0 (privalomas) |
wp queuety workflow rewind 42 1
Kaip tai veikia
Kai darbo eigą grąžinate į N žingsnį:
- Įvykių žurnale ieškoma
state_afterreikšmės, įrašytos užbaigus N žingsnį - Jei momentinės kopijos nėra, išmetama
RuntimeException - Užrakinama darbo eigos eilutė
- Darbo eigos būsena pakeičiama momentine kopija, išsaugant visus rezervuotus raktus (
_steps,_queue,_priorityir kt.) iš dabartinės darbo eigos eilutės current_stepnustatomas į N + 1, ostatus– įrunning- Išvalomi visi laukai
error_messageirfailed_at - Apdoroti įtraukiamas žingsnis, kurio indeksas N + 1
- Įrašomas žurnalo įvykis
workflow_rewound
Tuomet darbinis procesas paima į apdorojimo eilę įtrauktą žingsnį ir darbo eiga tęsiama įprastai nuo tos vietos.
Reikalavimai
Norint grąžinti darbo eigą į ankstesnį žingsnį, įvykių žurnale turi būti state_after duomenų. Įvykių žurnalas juos automatiškai įrašo kiekvienam step_completed įvykiui. Jei įvykių žurnalas buvo apkarpytas (naudojant WorkflowEventLog::prune()) ir tikslinio žingsnio būsena nebeišsaugota, grąžinti darbo eigos nepavyks.
Pasirūpinkite, kad įvykių žurnalo saugojimo laikotarpis apimtų laiką, į kurį gali prireikti grįžti.
Naudojimo atvejai
Ištaisykite klaidingai veikiantį žingsnio apdorojimo įrankį
Jei dėl žingsnio apdorojimo įrankio klaidos gautas neteisingas rezultatas, galite įdiegti pataisą ir grąžinti darbo eigą į ankstesnį žingsnį:
// 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 );
Bandykite dar kartą su kita konfigūracija
Jei žingsnis nepavyko dėl išorinių veiksnių (API apribojimo, neteisingų prisijungimo duomenų), pataisykite konfigūraciją ir grąžinkite darbo eigą į ankstesnį žingsnį, kad paleistumėte dar kartą:
// 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 );
Atkurkite po netinkamų duomenų
Jei ankstesnis žingsnis į būseną įrašė netinkamų duomenų, grąžinkite darbo eigą į žinomą tinkamą momentinę kopiją:
// 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 );
Palyginimas su pakartotiniu bandymu
| Aspektas | retry_workflow() |
rewind_workflow() |
|---|---|---|
| Tęsiama nuo | Nepavykusio žingsnio | Bet kurio ankstesnio žingsnio |
| Būsena | Dabartinė darbo eigos būsena | Atkurta iš įvykių žurnalo state_after |
| Reikalavimai | Darbo eigos būsena yra failed |
Įvykių žurnale yra tikslinio žingsnio momentinė kopija |
| Būsena po veiksmo | running |
running |
| Žurnalo įvykis | nėra | workflow_rewound |