Preskoči na vsebino

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:

PHP
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

Lupina
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)
Lupina
wp queuety workflow rewind 42 1

Kako deluje

Ko potek dela vrnete na korak N:

  1. V dnevniku dogodkov se poišče vrednost state_after, zabeležena po dokončanju koraka N
  2. Če posnetek stanja ne obstaja, se sproži RuntimeException
  3. Vrstica poteka dela se zaklene
  4. Stanje poteka dela se nadomesti s posnetkom stanja, pri čemer se ohranijo vsi rezervirani ključi (_steps, _queue, _priority itd.) iz trenutne vrstice poteka dela
  5. current_step se nastavi na N + 1, status pa na running
  6. Vsa polja error_message in failed_at se počistijo
  7. Korak z indeksom N + 1 se uvrsti v čakalno vrsto za obdelavo
  8. 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:

PHP
// 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:

PHP
// 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:

PHP
// 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