Viagem no tempo em fluxos de trabalho
Queuety pode voltar um fluxo de trabalho a uma etapa anterior e retomar a execução a partir desse ponto. Isso é útil quando uma etapa produziu uma saída incorreta, quando você quer tentar novamente com uma configuração diferente ou quando precisa se recuperar de dados corrompidos sem reiniciar todo o fluxo de trabalho.
A reversão depende do Registro de eventos do fluxo de trabalho. O registro de eventos precisa conter dados state_after para a etapa de destino.
Reverter um fluxo de trabalho
PHP API
Chame Queuety::rewind_workflow() com o ID do fluxo de trabalho e o índice da etapa para a qual deseja voltar:
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 );
O parâmetro to_step é o índice da etapa, iniciado em zero, cujo estado concluído deve ser restaurado. A execução é retomada na etapa seguinte (to_step + 1).
CLI
wp queuety workflow rewind <id> <step>
| Opção | Descrição |
|---|---|
<id> |
ID do fluxo de trabalho (obrigatório) |
<step> |
Índice da etapa para a qual retroceder, começando em 0 (obrigatório) |
wp queuety workflow rewind 42 1
Como funciona
Quando você reverte um fluxo de trabalho para a etapa N:
- O registro de eventos é consultado para obter o valor
state_afterregistrado após a conclusão da etapa N - Se não houver um snapshot, será lançada uma
RuntimeException - A linha do fluxo de trabalho é bloqueada
- O estado do fluxo de trabalho é substituído pelo snapshot, preservando todas as chaves reservadas (
_steps,_queue,_priorityetc.) da linha atual do fluxo de trabalho current_stepé definido como N + 1 estatusé definido comorunning- Todos os campos
error_messageefailed_atsão limpos - A etapa do índice N + 1 é colocada na fila para processamento
- Um evento de registro
workflow_rewoundé registrado
Em seguida, o worker processa a etapa colocada na fila, e o fluxo de trabalho prossegue normalmente a partir desse ponto.
Requisitos
A reversão exige dados state_after no registro de eventos. O registro os salva automaticamente para cada evento step_completed. Se o registro de eventos tiver sido depurado (por meio de WorkflowEventLog::prune()) e o estado da etapa de destino já não existir, a reversão falhará.
Verifique se o período de retenção do registro de eventos abrange o período ao qual você talvez precise voltar.
Casos de uso
Corrigir um handler de etapa com defeito
Se um handler de etapa tiver um bug que produziu uma saída incorreta, você pode implantar a correção e reverter:
// 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 );
Tentar novamente com outra configuração
Se uma etapa falhou devido a fatores externos (limite de requisições de API, credenciais incorretas), corrija a configuração e reverta para executá-la novamente:
// 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 );
Recuperar-se de dados incorretos
Se uma etapa anterior tiver inserido dados incorretos no estado, volte a um snapshot íntegro:
// 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ção com a nova tentativa
| Aspecto | retry_workflow() |
rewind_workflow() |
|---|---|---|
| Retoma a partir de | A etapa que falhou | Qualquer etapa anterior |
| Estado | Estado atual do fluxo de trabalho | Restaurado do snapshot do registro de eventos state_after |
| Requisito | O fluxo de trabalho está com status failed |
Snapshot do registro de eventos na etapa de destino |
| Status após a operação | running |
running |
| Evento de registro | nenhum | workflow_rewound |