Treci la conținut

Călătorie în timp în fluxurile de lucru

Queuety poate derula un flux de lucru înapoi la un pas anterior și poate relua execuția din acel punct. Acest lucru este util când un pas a produs rezultate incorecte, când doriți să reîncercați cu o configurație diferită sau când trebuie să recuperați date corupte fără să reporniți întregul flux de lucru.

Derularea înapoi se bazează pe Jurnalul de evenimente al fluxului de lucru. Jurnalul de evenimente trebuie să conțină state_after pentru pasul țintă.

Derularea înapoi a unui flux de lucru

PHP API

Apelați Queuety::rewind_workflow() cu ID-ul fluxului de lucru și indexul pasului la care doriți să reveniți:

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

Parametrul to_step este indexul de la 0 al pasului a cărui stare încheiată trebuie restaurată. Execuția se reia de la pasul următor (to_step + 1).

CLI

Shell
wp queuety workflow rewind <id> <step>
Opțiune Descriere
<id> ID-ul fluxului de lucru (obligatoriu)
<step> Indexul pasului la care se revine, numerotat de la 0 (obligatoriu)
Shell
wp queuety workflow rewind 42 1

Cum funcționează

Când derulați un flux de lucru înapoi la pasul N:

  1. Jurnalul de evenimente este interogat pentru valoarea state_after înregistrată după finalizarea pasului N
  2. Dacă nu există niciun instantaneu, se aruncă o RuntimeException
  3. Rândul fluxului de lucru este blocat
  4. Starea fluxului de lucru este înlocuită cu instantaneul, păstrând toate cheile rezervate (_steps, _queue, _priority etc.) din rândul curent al fluxului de lucru
  5. current_step este setat la N + 1, iar status este setat la running
  6. Câmpurile error_message și failed_at sunt șterse
  7. Pasul de la indexul N + 1 este pus în coadă pentru procesare
  8. Este înregistrat un eveniment de jurnal workflow_rewound

Apoi, lucrătorul preia pasul pus în coadă, iar fluxul de lucru continuă normal din acel punct.

Cerințe

Revenirea necesită date state_after în jurnalul de evenimente. Jurnalul de evenimente le înregistrează automat pentru fiecare eveniment step_completed. Dacă jurnalul de evenimente a fost curățat (prin WorkflowEventLog::prune()), iar starea pentru pasul țintă nu mai există, revenirea va eșua.

Asigurați-vă că perioada de păstrare a jurnalului de evenimente acoperă intervalul la care ați putea avea nevoie să reveniți.

Cazuri de utilizare

Remediați un handler de pas cu probleme

Dacă un handler de pas a avut o eroare care a produs rezultate incorecte, puteți implementa remedierea și reveni:

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

Reîncercați cu o configurație diferită

Când un pas a eșuat din cauza unor factori externi (API limită de rată, acreditări incorecte), remediați configurația și reveniți pentru a-l executa din nou:

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

Recuperați-vă după date incorecte

Dacă un pas anterior a introdus date incorecte în stare, reveniți la un instantaneu valid cunoscut:

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

Comparație cu reîncercarea

Aspect retry_workflow() rewind_workflow()
Reia de la Pasul eșuat Orice pas anterior
Stare Starea curentă a fluxului de lucru Restaurată din jurnalul de evenimente state_after
Necesită Fluxul de lucru are starea failed Instantaneul din jurnalul de evenimente pentru pasul țintă
Stare după running running
Eveniment de jurnal niciunul workflow_rewound