idempotence de la flotte : zero changed, et le zero est verifie
924 (rejeu depuis zero) -> 17 (2e passage) -> 0 (3e). Zero tache changed, zero echec sur les quatorze hotes. Le depot n'avait jamais fait ce test a l'echelle de la flotte. Verification du zero, parce qu'un zero peut signifier que les roles ne font plus rien : PLUS de taches se sont executees au passage a vide qu'au rejeu (2266 contre 2152). Elles ont toutes tourne et toutes trouve le systeme conforme. Un zero obtenu avec MOINS de taches aurait dit l'inverse. Ce que le test a rapporte : trois defauts, dont deux n'etaient pas des defauts d'idempotence mais des PANNES SILENCIEUSES — node_exporter mourait a chaque renouvellement de certificat sur les 14 hotes, et chaque deploiement invalidait les jetons OAuth2 de la forge. Le chiffre devient la ligne de base : un deploiement futur qui rapporte changed sur une flotte non modifiee signale desormais quelque chose. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
ffb515cf3c
commit
c7fe250520
2 changed files with 68 additions and 0 deletions
27
CHANGELOG.md
27
CHANGELOG.md
|
|
@ -1,5 +1,32 @@
|
||||||
# CHANGELOG — Set-OPS
|
# CHANGELOG — Set-OPS
|
||||||
|
|
||||||
|
## 2026-08-09 — Idempotence de la flotte : zéro, et c'est un zéro qui veut dire quelque chose
|
||||||
|
|
||||||
|
```
|
||||||
|
plays taches ok changed
|
||||||
|
rejeu depuis zero 61 2152 924
|
||||||
|
2e passage 30 2249 17
|
||||||
|
3e passage 30 2266 0
|
||||||
|
```
|
||||||
|
|
||||||
|
**Zéro tâche `changed`, zéro échec, sur les quatorze hôtes.** Le dépôt n'avait jamais fait
|
||||||
|
ce test à l'échelle de la flotte.
|
||||||
|
|
||||||
|
**Vérification du zéro**, parce qu'un zéro peut aussi signifier que les rôles ne font plus
|
||||||
|
rien : **plus de tâches se sont exécutées au passage à vide qu'au rejeu** — 2266 contre
|
||||||
|
2152. Elles ont toutes tourné et toutes trouvé le système conforme. Un zéro obtenu avec
|
||||||
|
*moins* de tâches aurait dit l'inverse.
|
||||||
|
|
||||||
|
**Ce que ce test aura coûté et rapporté.** Trois défauts trouvés, dont deux n'étaient pas
|
||||||
|
des défauts d'idempotence mais des **pannes silencieuses** : node_exporter mourait à chaque
|
||||||
|
renouvellement de certificat sur les quatorze hôtes, et chaque déploiement invalidait les
|
||||||
|
jetons OAuth2 de la forge. Aucune des deux ne se signalait autrement — c'est le compte de
|
||||||
|
`changed` qui les a fait apparaître.
|
||||||
|
|
||||||
|
Ce chiffre devient la **ligne de base**. Un déploiement futur qui rapporte `changed` sur
|
||||||
|
une flotte non modifiée signale désormais quelque chose. Tant que le fond était à 17, ce
|
||||||
|
signal était noyé.
|
||||||
|
|
||||||
## 2026-08-09 — Les deux dernières tâches non idempotentes, et ce qu'elles cachaient
|
## 2026-08-09 — Les deux dernières tâches non idempotentes, et ce qu'elles cachaient
|
||||||
|
|
||||||
**Prometheus — une liste non ordonnée.** `intersect` rend un *ensemble*, dont l'ordre
|
**Prometheus — une liste non ordonnée.** `intersect` rend un *ensemble*, dont l'ordre
|
||||||
|
|
|
||||||
|
|
@ -89,3 +89,44 @@ voie. La reconstruction a inversé l'ordre de démarrage et rendu visible un dé
|
||||||
laissé un schéma à moitié migré (`no such column: with_credentials`). Base mise de côté,
|
laissé un schéma à moitié migré (`no such column: with_credentials`). Base mise de côté,
|
||||||
recréée par Grafana — 95 s pour lier son port, ce qui explique la course.
|
recréée par Grafana — 95 s pour lier son port, ce qui explique la course.
|
||||||
- **Rien d'autre.** Ni certificat, ni compte, ni zone DNS, ni base de données.
|
- **Rien d'autre.** Ni certificat, ni compte, ni zone DNS, ni base de données.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Idempotence de la flotte — référence du 2026-08-09
|
||||||
|
|
||||||
|
Mesure faite après la seconde reconstruction, en rejouant `make deployer-tout` sur une
|
||||||
|
flotte intacte. Le dépôt n'avait jamais fait ce test à l'échelle de la flotte.
|
||||||
|
|
||||||
|
```
|
||||||
|
plays taches ok changed sautees
|
||||||
|
rejeu depuis zero 61 2152 924 443
|
||||||
|
2e passage 30 2249 17 ...
|
||||||
|
3e passage (apres) 30 2266 0 227
|
||||||
|
```
|
||||||
|
|
||||||
|
**Zéro tâche `changed`, zéro échec.**
|
||||||
|
|
||||||
|
Et ce zéro n'est pas du silence : **plus de tâches se sont exécutées au passage à vide
|
||||||
|
qu'au rejeu** (2266 contre 2152). Elles ont toutes tourné, et toutes trouvé le système
|
||||||
|
conforme. Un zéro obtenu avec moins de tâches aurait signifié l'inverse — des rôles qui ne
|
||||||
|
font plus leur travail.
|
||||||
|
|
||||||
|
### Ce que les 17 du deuxième passage cachaient
|
||||||
|
|
||||||
|
| Tâche | Ce que c'était vraiment |
|
||||||
|
|---|---|
|
||||||
|
| 13× `Activer et demarrer node_exporter` | **le service était mort** — tué par `SIGHUP` à chaque renouvellement de certificat |
|
||||||
|
| 2× Prometheus | liste de cibles non ordonnée (`intersect` rend un ensemble) |
|
||||||
|
| 2× Forgejo | **le dépôt faisait tourner le secret JWT du service** à chaque déploiement |
|
||||||
|
|
||||||
|
Deux des trois n'étaient pas des défauts d'idempotence : c'étaient des **pannes**, qu'un
|
||||||
|
compte de `changed` a rendues visibles. La collecte de métriques s'arrêtait toutes les
|
||||||
|
24 heures sur les quatorze hôtes, et les jetons OAuth2 de la forge étaient invalidés à
|
||||||
|
chaque passage. Ni l'une ni l'autre ne se signalait autrement.
|
||||||
|
|
||||||
|
### À quoi sert ce chiffre
|
||||||
|
|
||||||
|
Il devient la **ligne de base**. Un déploiement futur qui rapporte `changed` sur une flotte
|
||||||
|
non modifiée signale quelque chose : soit une dérive du système, soit un rôle qui a cessé
|
||||||
|
d'être idempotent. Tant que le fond était à 17, ce signal était noyé.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue