Pereiti prie turinio

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ą:

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 );

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

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

Kaip tai veikia

Kai darbo eigą grąžinate į N žingsnį:

  1. Įvykių žurnale ieškoma state_after reikšmės, įrašytos užbaigus N žingsnį
  2. Jei momentinės kopijos nėra, išmetama RuntimeException
  3. Užrakinama darbo eigos eilutė
  4. Darbo eigos būsena pakeičiama momentine kopija, išsaugant visus rezervuotus raktus (_steps, _queue, _priority ir kt.) iš dabartinės darbo eigos eilutės
  5. current_step nustatomas į N + 1, o status – į running
  6. Išvalomi visi laukai error_message ir failed_at
  7. Apdoroti įtraukiamas žingsnis, kurio indeksas N + 1
  8. Į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į:

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 );

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ą:

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 );

Atkurkite po netinkamų duomenų

Jei ankstesnis žingsnis į būseną įrašė netinkamų duomenų, grąžinkite darbo eigą į žinomą tinkamą momentinę kopiją:

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 );

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