Aller au contenu

Runbook: Relance manuelle d'un job

PD-3 CA-05 | Temps max: 5 min | Prérequis: Accès API/CLI


Prérequis

  • Accès à l'API backend (token d'authentification)
  • Job ID du job à relancer
  • Le job doit être en état FAILED et retryable: true

Diagnostic

1. Récupérer le statut du job

JOB_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

curl -s "http://localhost:3000/jobs/$JOB_ID" \
  -H "Authorization: Bearer $TOKEN" | jq .

Vérifier: - state: doit être FAILED - retryable: doit être true - retryCount: doit être < max retries (généralement 3)

2. Comprendre la cause de l'échec

curl -s "http://localhost:3000/jobs/$JOB_ID" \
  -H "Authorization: Bearer $TOKEN" | jq '.failedReason'

Résolution

Étape 1: Relancer le job via API

JOB_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

curl -X POST "http://localhost:3000/jobs/$JOB_ID/retry" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json"

Réponse attendue (HTTP 202):

{
  "jobId": "new-job-id",
  "state": "PENDING",
  "queueName": "default",
  "createdAt": "2024-01-01T00:00:00.000Z"
}

Étape 2: Noter le nouveau job ID

Le job original passe en état RETRIED et un nouveau job est créé.


Vérification

1. Vérifier l'état du job original

curl -s "http://localhost:3000/jobs/$JOB_ID" \
  -H "Authorization: Bearer $TOKEN" | jq '.state'

Résultat attendu: "RETRIED"

2. Vérifier le nouveau job

NEW_JOB_ID="nouveau-job-id-retourné"

curl -s "http://localhost:3000/jobs/$NEW_JOB_ID" \
  -H "Authorization: Bearer $TOKEN" | jq .

Résultat attendu: state évolue de PENDING -> RUNNING -> SUCCEEDED

3. Attendre la complétion

watch -n 2 "curl -s 'http://localhost:3000/jobs/$NEW_JOB_ID' -H 'Authorization: Bearer $TOKEN' | jq '.state'"

Rollback

Le retry crée un nouveau job - pas de rollback nécessaire.

Si le nouveau job échoue aussi:

1. Analyser l'erreur

curl -s "http://localhost:3000/jobs/$NEW_JOB_ID" \
  -H "Authorization: Bearer $TOKEN" | jq '.failedReason'

2. Si max retries atteint

Le job passe en état ABANDONED. Une intervention manuelle est requise: - Corriger la cause root - Créer un nouveau job manuellement via l'API /jobs POST


Cas spéciaux

Job non-retryable

Si retryable: false, le job ne peut pas être relancé automatiquement.

Solution: Créer un nouveau job manuellement:

curl -X POST "http://localhost:3000/jobs" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "JOB_TYPE",
    "data": { ... },
    "idempotencyKey": "unique-key"
  }'

Max retries atteint

Le job passe en ABANDONED. Vérifier les logs pour comprendre pourquoi.


Critère de succès

  • Job original en état RETRIED
  • Nouveau job créé avec retryCount incrémenté
  • Nouveau job atteint SUCCEEDED

Références

  • PD-3-specification.md: ERR-02 (échec explicite)
  • PD-21-specification.md: I-3 (retry explicite)
  • TC-ERR-01: Échec d'exécution d'une tâche