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:
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
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) |
wp queuety workflow rewind 42 1
Kā tas darbojas
Atgriežot darbplūsmu pie darbības N:
- Notikumu žurnālā tiek meklēta vērtība
state_after, kas ierakstīta pēc darbības N pabeigšanas - Ja momentuzņēmuma nav, tiek izmests
RuntimeException - Darbplūsmas rinda tiek bloķēta
- Darbplūsmas stāvoklis tiek aizstāts ar momentuzņēmumu, saglabājot visas rezervētās atslēgas (
_steps,_queue,_priorityu. c.) no pašreizējās darbplūsmas rindas current_steptiek iestatīts uz N + 1, betstatus— uzrunning- Visi lauki
error_messageunfailed_attiek notīrīti - Darbība ar indeksu N + 1 tiek ievietota apstrādes rindā
- 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:
// 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:
// 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:
// 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 |