Aller au contenu

CoMons

Collectif du Mons, Vitrac-sur-Montane (Corrèze)

RX-05 Le correctif était d'attendre, pas de changer de code

Retour d'expérience. Une extraction de données abandonnée un jour, réussie le lendemain sans qu'une ligne de la requête ait changé.

Famille
Retours d'expérience
Généricité
GÉNÉRIQUE
Statut
EXPLORÉ — production du corpus, non validée par une décision
Écrit le
17 septembre 2026
Licence
CC BY-SA 4.0

À emporter

Citer : CoMons, Collectif du Mons, « Le correctif était d'attendre, pas de changer de code », fiche RX-05, 17 septembre 2026. CC BY-SA 4.0.

L'attendu

Ajouter l'eau — rivières, plans d'eau — au fond de la carte du réseau, en l'extrayant d'OpenStreetMap par l'API Overpass au moment de la publication. Le code était écrit et testé sur les couches précédentes, routes et toponymes, qui étaient passées sans incident.

Le déroulé

L'extraction a rendu 504 Gateway Timeout. Réessai immédiat : 504. Découpage en seize morceaux au lieu d'un : 504.

J'ai arrêté là, et j'ai consigné : « l'extraction a échoué sur un délai dépassé d'Overpass », en ajoutant que c'était une ressource bénévole et que j'y avais déjà beaucoup puisé ce jour-là. La formulation était courtoise et le diagnostic était faux. J'avais rangé l'échec du côté de la requête ne passe pas ici — d'où l'idée, pour la reprise, de chercher une autre instance ou d'alléger encore la requête.

Le lendemain, la même requête a abouti. Sur les trente-six morceaux :

premier essaideuxièmetroisième
morceaux aboutis24 sur 3634 sur 3636 sur 36

Un tiers ont échoué d'abord, aucun au troisième essai. Le seul changement de fond : l'attente entre deux tentatives, portée de 8 secondes fixes à 15, puis 30, puis 60, puis 120.

Entre-temps, une mesure qui aurait dû être la première : ping vers l'instance, 100 ms aller-retour, 0 % de perte. La liaison depuis ici était effectivement mauvaise ces jours-là — elle n'était pour rien dans cet échec.

Les leçons

Un 504 ne décrit pas votre requête, il décrit l'état du serveur. C'est une information sur l'autre, pas sur soi. Les codes qui parlent de la requête — 400, 404, 422 — appellent une correction ; ceux qui parlent de la charge — 429, 502, 503, 504 — appellent une attente. Les traiter pareil conduit à modifier du code qui marche.

Réessayer vite est la seule réaction qui aggrave la panne qu'on constate. Une instance saturée l'est par la somme des demandes qu'elle reçoit. Trois essais en dix secondes ajoutent à ce qui bloque. L'attente qui double n'est pas de la résignation, c'est la seule contribution utile qu'un client puisse apporter à sa propre réussite.

Mesurer la liaison avant de l'accuser. « Le réseau est mauvais » était vrai de la maison et faux de cette panne. Deux commandes auraient tranché avant qu'une journée ne soit perdue à imaginer des contournements.

Un travail long sur une ressource distante doit être reprenable. Chaque morceau obtenu est désormais gardé sur disque. Reprendre repart du morceau qui a échoué, et surtout ne redemande pas à l'instance ce qu'elle a déjà rendu — la politesse et l'efficacité vont ici dans le même sens. Sans ce cache, la reconstruction du fichier, refaite trois fois ce jour-là pour en ajuster le contenu, aurait coûté trois extractions complètes ; elle n'a coûté aucun appel.

L'abandon documenté est meilleur que l'abandon silencieux, et moins bon que le diagnostic. Avoir écrit ce qui manquait a permis de reprendre proprement. Mais la note portait une cause supposée, présentée sans marque de doute, et cette cause a orienté la reprise dans la mauvaise direction. Consigner ce qu'on a observé — le code d'erreur, le nombre d'essais, l'état de la liaison — plutôt que ce qu'on en déduit.

Les changements

  • Distinguer, dans tout appel à un service distant, les codes qui disent votre demande de ceux qui disent ma charge. Les seconds déclenchent une attente qui double, jamais une modification de la demande.
  • Cinq essais au moins, espacés de 15, 30, 60 et 120 secondes, avant de conclure qu'une ressource distante est indisponible.
  • Toute extraction en plusieurs morceaux garde chaque réponse obtenue, hors du dépôt, et reprend là où elle s'est arrêtée.
  • Avant d'incriminer la liaison : la mesurer, et noter le chiffre.
  • Une note d'abandon consigne les faits observés. La cause supposée, si elle est écrite, l'est comme hypothèse.

Portée

Générique. Vaut pour toute API publique ou bénévole — Overpass, Hub'Eau, les services de la Géoplateforme, les points d'accès d'open data —, et plus largement pour tout travail long mené à travers une liaison qu'on ne maîtrise pas. Le motif se reconnaît à ceci : l'échec est intermittent et l'erreur ne parle pas de vous. Dans ce cas, le correctif est du temps, pas du code.

Fiches liées

RX-01 · RX-04 · PA-02