Preskočiť na obsah

Cestovanie v čase v pracovnom postupe

Queuety dokáže vrátiť pracovný postup k predchádzajúcemu kroku a pokračovať vo vykonávaní od tohto bodu. Hodí sa to, keď krok vytvoril nesprávny výstup, keď ho chcete zopakovať s inou konfiguráciou alebo keď potrebujete obnoviť postup po poškodení dát bez opätovného spustenia celého pracovného postupu.

Vrátenie späť závisí od Denníka udalostí pracovného postupu. Denník udalostí musí obsahovať state_after údaje pre cieľový krok.

Vrátenie pracovného postupu späť

PHP API

Zavolajte Queuety::rewind_workflow() s ID pracovného postupu a indexom kroku, ku ktorému sa chcete vrátiť:

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 index začínajúci od 0 kroku, ktorého dokončený stav sa má obnoviť. Vykonávanie pokračuje od nasledujúceho kroku (to_step + 1).

CLI

Shell
wp queuety workflow rewind <id> <step>
Možnosť Popis
<id> ID workflowu (povinné)
<step> Index kroku, na ktorý sa chcete vrátiť, od 0 (povinné)
Shell
wp queuety workflow rewind 42 1

Ako to funguje

Pri vrátení pracovného postupu ku kroku N:

  1. V denníku udalostí sa vyhľadá hodnota state_after zaznamenaná po dokončení kroku N
  2. Ak neexistuje snímka stavu, vyhodí sa RuntimeException
  3. Riadok pracovného postupu sa uzamkne
  4. Stav pracovného postupu sa nahradí snímkou stavu, pričom sa zachovajú všetky rezervované kľúče (_steps, _queue, _priority atď.) z aktuálneho riadka pracovného postupu
  5. current_step sa nastaví na N + 1 a status sa nastaví na running
  6. Všetky polia error_message a failed_at sa vymažú
  7. Krok s indexom N + 1 sa zaradí do frontu na spracovanie
  8. Zaznamená sa udalosť denníka workflow_rewound

Worker potom prevezme zaradený krok a pracovný postup od tohto bodu pokračuje ako zvyčajne.

Požiadavky

Vrátenie späť vyžaduje údaje state_after v denníku udalostí. Denník udalostí ich automaticky zaznamenáva pri každej udalosti step_completed. Ak bol denník udalostí skrátený (pomocou WorkflowEventLog::prune()) a stav cieľového kroku už neexistuje, vrátenie späť zlyhá.

Uistite sa, že doba uchovávania denníka udalostí pokrýva obdobie, ku ktorému sa možno budete potrebovať vrátiť.

Prípady použitia

Oprava chybného obslužného programu kroku

Ak mal obslužný program kroku chybu, ktorá spôsobila nesprávny výstup, môžete nasadiť opravu a vrátiť pracovný postup späť:

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

Opätovné spustenie s inou konfiguráciou

Ak krok zlyhal z externých dôvodov (obmedzenie počtu požiadaviek API, nesprávne prihlasovacie údaje), opravte konfiguráciu a spustite ho znova návratom späť:

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

Obnovenie po chybných dátach

Ak predchádzajúci krok vložil do stavu nesprávne údaje, vráťte sa k známej správnej snímke stavu:

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

Porovnanie s opakovaným pokusom

Aspekt retry_workflow() rewind_workflow()
Pokračuje od Krok, ktorý zlyhal Ľubovoľný predchádzajúci krok
Stav Aktuálny stav pracovného postupu Obnovený z denníka udalostí state_after
Vyžaduje Pracovný postup má stav failed Snímku stavu cieľového kroku v denníku udalostí
Stav potom running running
Udalosť denníka žiadna workflow_rewound