fix: handle API timeout during paginated requests #18

Closed
opened 2026-03-13 03:26:23 +01:00 by admin · 0 comments
Owner

Description

Lors de requêtes paginées (repos avec beaucoup d'issues/milestones), un timeout sur une page intermédiaire fait crasher tout le collecteur. Le retry existant ne couvre que les réponses 429, pas les timeouts réseau.

Symptôme

requests.exceptions.ReadTimeout: HTTPConnectionPool(host='...', port=3000): Read timed out.

Le dashboard affiche une stack trace au lieu d'un résultat partiel ou d'un message d'erreur clair.

Comportement attendu

  • Retry automatique (max 2 tentatives) sur timeout réseau
  • Si échec après retries : log warning, continuer avec les données collectées jusque-là
  • Ne jamais crasher sur un timeout — afficher les repos disponibles avec un avertissement

Critères d'acceptation

  • Retry sur ReadTimeout et ConnectTimeout (max 2 tentatives)
  • Backoff linéaire entre retries (1s, 2s)
  • Dégradation gracieuse : données partielles + warning
  • Test reproduisant le timeout (mock socket timeout)
  • Test vérifiant la dégradation gracieuse

Points de test workflow v2.6.1

  • Bug Fix Procedure : 4 étapes (Reproduce → Diagnose → Fix → Verify)
  • Le builder doit d'abord écrire un test qui reproduit le crash, puis corriger
## Description Lors de requêtes paginées (repos avec beaucoup d'issues/milestones), un timeout sur une page intermédiaire fait crasher tout le collecteur. Le retry existant ne couvre que les réponses 429, pas les timeouts réseau. ## Symptôme ``` requests.exceptions.ReadTimeout: HTTPConnectionPool(host='...', port=3000): Read timed out. ``` Le dashboard affiche une stack trace au lieu d'un résultat partiel ou d'un message d'erreur clair. ## Comportement attendu - Retry automatique (max 2 tentatives) sur timeout réseau - Si échec après retries : log warning, continuer avec les données collectées jusque-là - Ne jamais crasher sur un timeout — afficher les repos disponibles avec un avertissement ## Critères d'acceptation - [ ] Retry sur `ReadTimeout` et `ConnectTimeout` (max 2 tentatives) - [ ] Backoff linéaire entre retries (1s, 2s) - [ ] Dégradation gracieuse : données partielles + warning - [ ] Test reproduisant le timeout (mock socket timeout) - [ ] Test vérifiant la dégradation gracieuse ## Points de test workflow v2.6.1 - **Bug Fix Procedure** : 4 étapes (Reproduce → Diagnose → Fix → Verify) - Le builder doit d'abord écrire un test qui reproduit le crash, puis corriger
admin added this to the v1.4.0 milestone 2026-03-13 03:26:23 +01:00
admin closed this issue 2026-03-13 04:21:38 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/gitea-dashboard#18