etl : la chaîne passe au quart d'heure et l'agrégat suit #206
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!206
Loading…
Reference in a new issue
No description provided.
Delete branch "lenaic/205-fraicheur-zone-or"
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?
Ferme le #205.
Le défaut
La prévision annoncée H+1 travaillait à trois heures d'écart. Mesuré en production le 08/09 à 12 h 58 :
La colonne
retard_1h_kwdu modèle, censée porter la moyenne de l'heure précédant la cible, contenait celle de 10 h pour prédire 13 h.Deux réglages posés séparément s'additionnaient sans que personne ne les regarde ensemble, et aucun des deux n'était faux seul.
La chaîne ETL tournait une fois par heure, donc les minutes de l'heure
Hn'arrivaient danspublic.mesurequ'à(H+1):27. La 0016 gardait en conséquence unend_offsetd'une heure, pour ne pas matérialiser un seau nourri de lignes pas encore chargées. Son commentaire dit l'intention et elle est juste. Le moyen était plus fort que nécessaire : un seau ne se matérialise que s'il tient entièrement dans la fenêtre, donc le seauH, clos à(H+1):00, attendait le passage de(H+2):00.Le remède, et son ordre
La chaîne passe au quart d'heure : argent
:00 :15 :30 :45, or trois minutes derrière, chargement cinq de plus. L'heureHest complète en base à(H+1):08au pire. La migration0020ramène alorsend_offsetetschedule_intervalà quinze minutes, et le seauHdevient lisible à(H+1):15.L'ordre n'est pas indifférent. Toucher l'agrégat en premier matérialiserait des seaux à partir de lignes pas encore chargées. C'est pourquoi les deux partent ensemble, et c'est l'invariant que le nouveau banc tient.
Retard attendu après : 15 à 75 minutes, contre 120 à 180.
Ce que j'ai vérifié plutôt que supposé
La crainte de la 0016 est légitime, il ne suffisait pas de la déclarer infondée. Sur
enervision_preprod: une ligne témoin posée dans l'heure EN COURS, puis unrefresh_continuous_aggregatesur une fenêtre finissant volontairement trente minutes à l'intérieur de ce seau. Le seau incomplet n'est pas matérialisé, TimescaleDB tronque la fenêtre à la borne de seau inférieure. La préproduction a été remise à l'identique, politique et ligne témoin comprises.La migration n'appelle pas
refresh_continuous_aggregate. J'en avais écrit un. Testé : il refuse de tourner dans une transaction, etrun_migrationsapplique chaque fichier dans une transaction. Il aurait fait échouer le démarrage de l'API, donc le déploiement. Retiré, et le manuel prévient qu'un contrôle joué dans la minute qui suit le déploiement verra encore l'ancien retard.Le banc a été vu rouge quatre fois avant d'être cru : argent remis à l'heure,
end_offsetremis à une heure, unrefreshajouté, un chargement collé à:14. Il rougit sur les quatre et ne rougit pas sur la mention en commentaire.Il déclenchait mon propre banc d'hygiène du #174 (
if … | grep -qsouspipefail) et ne le montrait pas, parce que le fichier n'était pas encore suivi par git. Corrigé avant de commettre.Ce que ça ne fait pas
Le plancher reste de deux seaux d'écart, pas un. Une prévision émise avant le début de son heure cible ne peut pas utiliser l'heure qui la précède, encore en train de se remplir. Descendre à un seul exigerait d'émettre après le début de l'heure visée, donc d'échanger l'avance contre la précision. C'est un arbitrage EC06, posé dans le ticket et volontairement non tranché ici.
La prévision reste horaire : EF-07 en demande une par heure, pas quatre. Elle gagne au passage douze minutes de marge derrière le chargement de
:23, contre huit derrière celui de:27.Ce qu'il faut regarder en relecture
Les minutes de crontab, surtout la marge entre le chargement et le passage de la politique. Et la question de fond : est-ce qu'on veut aussi trancher l'arbitrage avance/précision avant le jury, ou le laisser comme point identifié.
gabriel referenced this pull request2026-09-09 13:17:41 +00:00