Pāriet uz saturu

Darbplūsmas laika ceļošana

Queuety var atgriezt darbplūsmu pie iepriekšējas darbības un atsākt izpildi no šī punkta. Tas noder, ja darbība radīja nepareizu izvadi, ja vēlaties mēģināt vēlreiz ar citu konfigurāciju vai ja jāatkopjas pēc bojātiem datiem, nepārstartējot visu darbplūsmu.

Atgriešanās balstās uz Darbplūsmas notikumu žurnālu. Notikumu žurnālā jābūt mērķa darbības state_after datiem.

Atgriešanās darbplūsmā

PHP API

Izsauciet Queuety::rewind_workflow(), norādot darbplūsmas ID un darbības indeksu, pie kura atgriezties:

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

Parametrs to_step ir no nulles sākts indekss darbībai, kuras pabeigtais stāvoklis jāatjauno. Izpilde tiek atsākta ar nākamo darbību (to_step + 1).

CLI

Apvalks
wp queuety workflow rewind <id> <step>
Opcija Apraksts
<id> Darbplūsmas ID (obligāts)
<step> Darbības indekss, līdz kuram attīt, sākot no 0 (obligāts)
Apvalks
wp queuety workflow rewind 42 1

Kā tas darbojas

Atgriežot darbplūsmu pie darbības N:

  1. Notikumu žurnālā tiek meklēta vērtība state_after, kas ierakstīta pēc darbības N pabeigšanas
  2. Ja momentuzņēmuma nav, tiek izmests RuntimeException
  3. Darbplūsmas rinda tiek bloķēta
  4. Darbplūsmas stāvoklis tiek aizstāts ar momentuzņēmumu, saglabājot visas rezervētās atslēgas (_steps, _queue, _priority u. c.) no pašreizējās darbplūsmas rindas
  5. current_step tiek iestatīts uz N + 1, bet status — uz running
  6. Visi lauki error_message un failed_at tiek notīrīti
  7. Darbība ar indeksu N + 1 tiek ievietota apstrādes rindā
  8. Tiek reģistrēts workflow_rewound žurnāla notikums

Pēc tam izpildītājs paņem rindā ievietoto darbību un no šī punkta turpina darbplūsmu kā parasti.

Prasības

Lai atgrieztos, notikumu žurnālā jābūt state_after datiem. Notikumu žurnāls tos automātiski ieraksta katram step_completed notikumam. Ja notikumu žurnāls ir apgriezts (izmantojot WorkflowEventLog::prune()) un mērķa darbības stāvoklis vairs nepastāv, atgriešanās neizdosies.

Pārliecinieties, ka notikumu žurnāla saglabāšanas periods aptver laiku, pie kura, iespējams, būs jāatgriežas.

Lietojuma gadījumi

Izlabojiet kļūdainu darbības apstrādātāju

Ja darbības apstrādātāja kļūda radīja nepareizu izvadi, varat izvietot labojumu un atgriezties:

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

Mēģiniet vēlreiz ar citu konfigurāciju

Ja darbība neizdevās ārēju faktoru dēļ (API ierobežojums, nepareizi piekļuves dati), izlabojiet konfigurāciju un atgriezieties, lai mēģinātu vēlreiz:

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

Atkopšanās pēc kļūdainiem datiem

Ja iepriekšēja darbība ievietoja stāvoklī kļūdainus datus, atgriezieties pie zināma derīga momentuzņēmuma:

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

Salīdzinājums ar atkārtotu mēģinājumu

Aspekts retry_workflow() rewind_workflow()
No kurienes atsāk Neveiksmīgā darbība Jebkura iepriekšēja darbība
Stāvoklis Pašreizējais darbplūsmas stāvoklis Atjaunots no notikumu žurnāla state_after
Nepieciešams Darbplūsmai ir statuss failed Notikumu žurnālā ir mērķa darbības momentuzņēmums
Statuss pēc tam running running
Žurnāla notikums nav workflow_rewound