Session 15 — F4 Data Corruption + Revue de code complète¶
Durée : ~4 heures
Contexte : Suite directe de la session 14. Implémentation de F4 (anomalie Master),
ajout des Gauges Prometheus pour tous les compteurs fonctionnels, panel Grafana dédié F4,
documentation complète. Revue de code systématique sur tous les fichiers modifiés.
🎯 Objectif de la session¶
Implémenter l'anomalie F4 — Corruption silencieuse : la seule anomalie fonctionnelle qui retourne HTTP 200 avec Tempo vert et aucune exception JVM, tout en corrompant les données produit en mémoire (prix ×1,5, stock forcé à 0, description tronquée).
Paradoxe pédagogique : le monitoring est aveugle. La détection nécessite l'inspection directe des payloads JSON — compétence distincte de toutes les anomalies précédentes.
📦 Fichiers modifiés¶
| Fichier | Type | Nature des changements |
|---|---|---|
FunctionalChaosService.java |
Backend | cntF4, applyF4DataCorruption(), 5 switch étendus à 4, 4 Gauges Prometheus, Javadoc |
FunctionalChaosController.java |
Backend | Validation > 4, message erreur, commentaire Javadoc, defaultValue="4" |
ProductService.java |
Backend | Hook .map(functionalChaosService::applyF4DataCorruption) dans getProductById() |
chaos-admin/index.html |
Frontend | Carte N4, FN_LEVELS[4], boucle <= 4, compteur F4 (déjà présent lors de la reprise) |
monitoring/monitoring.html |
Frontend | Bandeau F4, compteur F4, repeat(4,1fr), labels/colors N4, fetchFunctional() (déjà présent) |
dashboard-apm-formateur.json |
Grafana | Mapping niveau 4, threshold purple, panel id=7 F4 Corruptions |
dashboard-apm-eleve.json |
Grafana | Guide traces +F4 (note "HTTP 200, Tempo vert"), description table traces, guide flamegraph +F4 invisible |
functional.md |
Docs | Section F4 complète, tableau signatures, TraceQL, observabilité |
student-guide.md |
Docs | TP5b Chaos Fonctionnel APM complet (4 niveaux) |
session-index.md |
Docs | Session 15 + tableau architecture Fonctionnel 0→4 |
🔧 Implémentation F4 — détails techniques¶
Point d'injection¶
ProductService.getProductById() — choix délibéré :
- Hors checkout → ne bloque pas la règle d'or (commande toujours possible)
- Endpoint fréquent — chaque visite de fiche produit déclenche la corruption
- Retour Optional<Product> → .map() est idiomatique et non-régressif
Corruptions appliquées¶
| Champ | Valeur originale | Valeur corrompue | Raison pédagogique |
|---|---|---|---|
price |
ex. 29.99 | 44.99 (×1.5, HALF_UP) | Visible à l'œil : prix anormal |
stock |
ex. 42 | 0 | Produit affiché épuisé à tort |
description |
texte complet | 30 premiers chars + [ERREUR: donnees tronquees] |
Simule sérialisation corrompue |
Garanties de non-régression¶
- Niveaux 0–3 :
if (level.get() < 4) return product— retour immédiat, zéro overhead - Null-safe :
if (product == null) return null— protège l'Optional.empty() - BDD intacte : la copie est construite champ par champ avec
new Product()— jamais desave() - Champs identiques :
id,name,category,imageUrl,createdAt,updatedAt— copiés tels quels
Gauges Prometheus ajoutées¶
Gauge.builder("chaos.functional.f1.npe", cntF1, AtomicLong::get)...
Gauge.builder("chaos.functional.f2.stackoverflow", cntF2, AtomicLong::get)...
Gauge.builder("chaos.functional.f3.oom", cntF3, AtomicLong::get)...
Gauge.builder("chaos.functional.f4.corruption", cntF4, AtomicLong::get)...
Noms Prometheus (dots → underscores automatique) :
- chaos_functional_f4_corruption → utilisé dans le panel Grafana id=7
🔍 Revue de code — observations¶
Documentation non à jour corrigée¶
monitoring.htmlbandeau :F3 OOMsans mention F4 → corrigéfunctional.mdtableau niveaux : colonne Master absente → ajoutéestudent-guide.md: aucun TP Chaos Fonctionnel → TP5b créé (4 niveaux)session-index.mdarchitecture : Fonctionnel0→3→0→4
Découverte session — Gauges Prometheus manquantes (F1/F2/F3)¶
Constat : les compteurs cntF1, cntF2, cntF3 existaient en AtomicLong depuis la session 11
mais n'étaient jamais exposés comme métriques Prometheus. Ils n'étaient accessibles que
via /api/chaos/public/functional/status (JSON). Un panel Grafana sur ces compteurs
aurait retourné "No data".
Correction : 4 Gauges Micrometer ajoutés dans le constructeur pour F1, F2, F3 et F4.
Désormais chaos_functional_f1_npe, chaos_functional_f2_stackoverflow,
chaos_functional_f3_oom, chaos_functional_f4_corruption sont disponibles dans Prometheus.
Cohérence chaos-admin et monitoring déjà avancés¶
Lors de la reprise, les deux fichiers HTML étaient partiellement modifiés (carte N4 présente, labels JS à jour). Philippe avait sauvegardé en cours de session précédente. La revue a confirmé qu'aucun doublon ni régression n'était présent.
🗂️ Bilan qualité¶
Erreurs Claude cette session : 0 régression fonctionnelle
- Doublon
cntF4détecté et corrigé immédiatement via diff - Éditions
monitoring.htmlviaedit_block: encodage UTF-8 détecté via fuzzy match → basculement sur lecture ligne exacte avant édition
Pattern identifié : les fichiers HTML volumineux nécessitent toujours une lecture
préalable de la ligne cible avant edit_block — les apostrophes et accents encodés
différemment causent des faux négatifs sur la recherche exacte.
🎓 Valeur pédagogique ajoutée¶
F4 complète le spectre d'apprentissage APM :
| Niveau | Ce que l'étudiant apprend |
|---|---|
| Junior (F1) | Lire une stacktrace dans Tempo, identifier une NPE |
| Confirmé (F2) | Différencier NPE vs SOE, reconnaître une récursion infinie |
| Expert (F3) | Corréler heap JVM + Pyroscope + logs, comprendre un OOM |
| Master (F4) | Comprendre qu'un monitoring "vert" ne garantit pas des données correctes |
La progression couvre ainsi les deux grandes familles de problèmes APM : - Anomalies bruyantes (F1/F2/F3) : détectables automatiquement - Anomalies silencieuses (F4) : nécessitent une validation fonctionnelle active