Pular para o conteúdo

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:

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

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

Shell
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)
Shell
wp queuety workflow rewind 42 1

Como funciona

Quando você reverte um fluxo de trabalho para a etapa N:

  1. O registro de eventos é consultado para obter o valor state_after registrado após a conclusão da etapa N
  2. Se não houver um snapshot, será lançada uma RuntimeException
  3. A linha do fluxo de trabalho é bloqueada
  4. O estado do fluxo de trabalho é substituído pelo snapshot, preservando todas as chaves reservadas (_steps, _queue, _priority etc.) da linha atual do fluxo de trabalho
  5. current_step é definido como N + 1 e status é definido como running
  6. Todos os campos error_message e failed_at são limpos
  7. A etapa do índice N + 1 é colocada na fila para processamento
  8. 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:

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

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:

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

Recuperar-se de dados incorretos

Se uma etapa anterior tiver inserido dados incorretos no estado, volte a um snapshot íntegro:

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çã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