Пътуване във времето в работен процес
Queuety може да върне работния процес към предишна стъпка и да възобнови изпълнението оттам. Това е полезно, ако стъпка е произвела грешен резултат, ако искате да опитате отново с различна конфигурация или ако трябва да възстановите повредени данни, без да стартирате целия работен процес отначало.
Връщането назад разчита на журнала на събитията на работния процес. Журналът на събитията трябва да съдържа данни state_after за целевата стъпка.
Връщане на работен процес назад
PHP API
Извикайте Queuety::rewind_workflow() с ID на работния процес и индекса на стъпката, към която да се върнете:
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 );
Параметърът to_step е индексът, започващ от нула, на стъпката, чието завършено състояние трябва да бъде възстановено. Изпълнението продължава от следващата стъпка (to_step + 1).
CLI
wp queuety workflow rewind <id> <step>
| Опция | Описание |
|---|---|
<id> |
ИД на работен поток (задължително) |
<step> |
Индекс на стъпката, към която да се върне потокът, започващ от 0 (задължително) |
wp queuety workflow rewind 42 1
Как работи
Когато върнете работния процес към стъпка N:
- В журнала на събитията се търси стойността
state_after, записана след завършването на стъпка N - Ако няма моментна снимка, се хвърля
RuntimeException - Редът на работния процес се заключва
- Състоянието на работния процес се заменя с моментната снимка, като се запазват всички запазени ключове (
_steps,_queue,_priorityи др.) от текущия ред на работния процес current_stepсе задава на N + 1, аstatusсе задава наrunning- Всички полета
error_messageиfailed_atсе изчистват - Стъпката с индекс N + 1 се добавя на опашката за обработка
- Записва се събитие
workflow_rewoundв журнала
След това работникът поема добавената на опашката стъпка и работният процес продължава нормално оттам нататък.
Изисквания
За връщане назад са необходими данни state_after в журнала на събитията. Журналът ги записва автоматично за всяко събитие step_completed. Ако журналът е бил съкратен (чрез WorkflowEventLog::prune()) и състоянието за целевата стъпка вече не съществува, връщането назад ще е неуспешно.
Уверете се, че периодът на съхранение на журнала на събитията покрива времето, до което може да се наложи да се върнете.
Случаи на употреба
Поправяне на проблемен обработчик на стъпка
Ако обработчикът на стъпка е имал грешка, довела до неправилен резултат, можете да внедрите поправката и да върнете работния процес назад:
// 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 );
Повторен опит с различна конфигурация
Ако стъпка се е провалила поради външни фактори (ограничение на заявките към API, невалидни идентификационни данни), поправете конфигурацията и се върнете назад, за да опитате отново:
// 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 );
Възстановяване след невалидни данни
Ако по-ранна стъпка е въвела невалидни данни в състоянието, върнете се към известна добра моментна снимка:
// 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 );
Сравнение с повторен опит
| Аспект | retry_workflow() |
rewind_workflow() |
|---|---|---|
| Продължава от | Неуспешната стъпка | Всяка предишна стъпка |
| Състояние | Текущото състояние на работния процес | Възстановено от моментна снимка в журнала на събитията state_after |
| Изисква | Работният процес е в състояние failed |
Моментна снимка в журнала на събитията за целевата стъпка |
| Състояние след това | running |
running |
| Събитие в журнала | няма | workflow_rewound |