fix(collecteur) : la requête se lit jusqu'à la fin de ses en-têtes (RST sur le 132) #1820
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/collecteur-requete-decoupee"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Le symptôme
Le service du 132 journalisait, en boucle :
43 lignes en 25 min, soit une requête sur trois en échec, alors que le collecteur répond en 0,00 s :
systemd-runavec ses propriétés) : 13/13 OK à 10 s d'intervalle ;Le collecteur n'était donc ni éteint, ni lent, ni saturé.
La cause
servir(collecteur) lisait la requête d'un seulreadde 2 048 octets :Un
GETde 74 octets tient en un paquet, mais TCP est libre de le découper. Quand ça arrivait, le collecteur répondait sur un chemin tronqué (/proces), puis fermait le socket pendant que le service écrivait encore sa requête — d'oùBroken pipeà l'envoi etConnection reset by peerà la lecture. Intermittent par nature : d'où les mesures ci-dessus qui ne le reproduisent jamais sur un petit échantillon.Le faux worker du banc de l'orchestrateur avait reçu exactement ce correctif (
cad5ef01, « le faux worker lit la requête jusqu'à la fin des en-têtes ») ; le collecteur réel, lui, ne l'avait pas eu.Le correctif
La lecture passe dans
collecteur::http::lire_requete: jusqu'à\r\n\r\n, la fin du flux, ou une borne de 8 Kio (ce serveur ne sert que desGETsans corps). Avec son banc (collecteur/tests/http.rs) :Mesuré :
cargo test -p collecteur --locked, 65 tests, 0 échec.Reste à faire après la fusion
Le binaire du collecteur tourne sur le LXC 130 : il faudra le reposer (
deployer.sh, partie collecteur) pour que le 132 cesse de journaliser ces échecs.