33800 Docs

← Retour

Fix pre_deploy hook timeout on ai-orchestrator

Status : IMPLEMENTEE

Date: 09/02/2026 20:30

Diagnostic

Le pipeline 941 (ai-orchestrator) a echoue avec:

HTTP 000: curl: (28) Operation timed out after 30002 milliseconds with 0 bytes received

Ce n'est PAS un probleme reseau

Tests effectues depuis un container Docker sur prod-portainer:

La vraie cause: endpoint /api/worker/pause?stop_tools=true bloque trop longtemps

Timeline pipeline 941:

  1. 19:14:24 - Le hook envoie POST /api/worker/pause?stop_tools=true
  2. 19:14:24 - ai-orchestrator recoit la requete, "Worker PAUSED by user"
  3. 19:14:24 - Commence "Stopping ollama to free VRAM..."
  4. 19:14:57 - "Stopping ollama-gpu1 to free VRAM..." (33 secondes plus tard)
  5. 19:14:54 - curl timeout a 30s (--max-time 30 dans hooks.sh)

Le worker_pause() dans main.py parcourt TOUS les tools sequentiellement:

Solutions proposees (par ordre de preference)

Option A: Augmenter le timeout du hook (rapide, safe)

Dans conf.prod.gouroubleu.yml, changer le hook http en ajoutant un timeout plus long:

hooks:
  pre_deploy:
    - action: http
      method: POST
      url: "http://192.168.1.12:5501/api/worker/pause?stop_tools=true"
      description: "Pause worker + stop tools (liberer VRAM)"
      timeout: 90  # au lieu de 30s par defaut

ET dans hooks.sh, supporter un parametre timeout sur les hooks http (actuellement --max-time 30 en dur).

Option B: Rendre le pause endpoint async (meilleur, plus de travail)

Modifier worker_pause() dans main.py pour:

  1. Set le flag pause immediatement
  2. Lancer le stop des tools en background (asyncio.create_task)
  3. Retourner 200 tout de suite

Le hook wait_http qui suit verifie deja que le status est "paused", donc ca marche.

Option C: Separer pause et stop_tools (2 hooks)

  1. Hook 1: POST /api/worker/pause (sans stop_tools) -> instant
  2. Hook 2 (wait_http): Attendre status paused -> instant
  3. Hook 3: POST /api/worker/stop_tools (nouvel endpoint) -> avec long timeout

Recommandation

Option A est la plus rapide a implementer et resout le probleme immediat. Option B est la meilleure solution long terme.

On peut faire A maintenant et B plus tard.