CI: connectivité serveur-de-cache du runner (reserveCache timeout — cause #2) #234

Closed
opened 2026-07-01 00:45:49 +00:00 by maximus · 5 comments
Owner

Refs: spec-decisions-ci-build-optimization.md + spec-plan-ci-build-optimization.md ; baseline #231.

La baseline (#231) confirme la cause #2 : le save du cache Actions échoue systématiquement avec reserveCache failed: Request timeout → aucun cache persisté → recompilation complète (~24 min) à chaque run, + ~7 min/run gaspillées en tentatives de save. Le conteneur job n'atteint pas de façon fiable le serveur de cache d'act_runner (gotcha réseau documenté Gitea).

C'est le vrai blocage : ni le cache manuel actuel ni Swatinem/rust-cache (#232) ne peuvent aider tant que reserveCache timeout (même backend).

  • Sur le VPS/hôte runner : inspecter la config act_runner (bloc cache: { enabled, dir, host, port }) et vérifier que le conteneur job (réseau Docker) atteint bien le serveur de cache du runner (host/port joignables).
  • Corriger la connectivité (ex : fixer cache.host sur une IP/host joignable depuis le réseau des conteneurs job ; aligner les réseaux Docker job↔runner).
  • Re-lancer une PR de contrôle : confirmer Cache saved (plus de reserveCache timeout) puis, au run suivant, un vrai Cache restored.
  • Une fois la connectivité OK : #232 (rust-cache) prend son sens (cache réellement persisté + pruné).

Accès hôte VPS requis (ssh ubuntu@…). Hors des fichiers workflow. Bloque le bénéfice de #232.

Refs: spec-decisions-ci-build-optimization.md + spec-plan-ci-build-optimization.md ; baseline #231. La baseline (#231) confirme la **cause #2** : le save du cache Actions échoue systématiquement avec `reserveCache failed: Request timeout` → aucun cache persisté → recompilation complète (~24 min) à chaque run, + ~7 min/run gaspillées en tentatives de save. Le conteneur job n'atteint pas de façon fiable le serveur de cache d'`act_runner` (gotcha réseau documenté Gitea). C'est le **vrai blocage** : ni le cache manuel actuel ni `Swatinem/rust-cache` (#232) ne peuvent aider tant que `reserveCache` timeout (même backend). - [ ] Sur le VPS/hôte runner : inspecter la config `act_runner` (bloc `cache: { enabled, dir, host, port }`) et vérifier que le conteneur job (réseau Docker) atteint bien le serveur de cache du runner (host/port joignables). - [ ] Corriger la connectivité (ex : fixer `cache.host` sur une IP/host joignable depuis le réseau des conteneurs job ; aligner les réseaux Docker job↔runner). - [ ] Re-lancer une PR de contrôle : confirmer `Cache saved` (plus de `reserveCache timeout`) puis, au run suivant, un vrai `Cache restored`. - [ ] Une fois la connectivité OK : #232 (rust-cache) prend son sens (cache réellement persisté + pruné). Accès hôte VPS requis (`ssh ubuntu@…`). Hors des fichiers workflow. Bloque le bénéfice de #232.
maximus added this to the spec-ci-build-optimization milestone 2026-07-01 00:45:49 +00:00
maximus added the
status:ready
type:infra
source:human
labels 2026-07-01 00:45:49 +00:00
maximus added
status:review
and removed
status:ready
labels 2026-10-03 19:10:08 +00:00
maximus added
status:approved
and removed
status:review
labels 2026-10-03 20:49:15 +00:00
maximus added
status:review
and removed
status:approved
labels 2026-10-03 22:05:03 +00:00
Author
Owner

Après le merge de #375 (2026-10-03)

La connectivité est réparée côté VPS (diagnostic et correctif dans #374), et rust-cache est en place sur main depuis #375 (f821492). Le corps de cette issue est dépassé sur la cause : fixer cache.host n'aurait pas suffi, car le port du cache était filtré par ufw et tiré au hasard par le runner.

Point 1 de la liste post-merge : fait. check-rust lancé sur main par workflow_dispatch (run 464). Il calcule la même clé que l'entrée de la PR (v0-rust-rust-Linux-x64-6448e498-86c598be) et répond pourtant No cache found. : l'entrée de la PR était bien isolée. Puis Cache Size: ~999 MB et Cache saved successfully, cette fois dans le cache partagé. Le déclencheur workflow_dispatch est donc prouvé.

Reste avant fermeture, d'où status:blocked :

  1. Premier run de la prochaine PR Rust : il doit restaurer cette entrée partagée (Restored from cache key … full match: true).
  2. Premier run planifié, lundi 2026-10-05 à 06:30 UTC : vert, avec Cache up-to-date. ou Cache saved successfully dans le journal, puisqu'une sauvegarde ratée laisse le job vert.
  3. Taille de /home/ubuntu/.cache/actcache sur le VPS (Max : du -sh /home/ubuntu/.cache/actcache).

L'issue sera fermée à la main avec ces preuves. Suites hors périmètre : #376.

## Après le merge de #375 (2026-10-03) La connectivité est réparée côté VPS (diagnostic et correctif dans #374), et rust-cache est en place sur `main` depuis #375 (`f821492`). Le corps de cette issue est dépassé sur la cause : fixer `cache.host` n'aurait pas suffi, car le port du cache était filtré par ufw et tiré au hasard par le runner. **Point 1 de la liste post-merge : fait.** `check-rust` lancé sur `main` par `workflow_dispatch` (run 464). Il calcule la même clé que l'entrée de la PR (`v0-rust-rust-Linux-x64-6448e498-86c598be`) et répond pourtant `No cache found.` : l'entrée de la PR était bien isolée. Puis `Cache Size: ~999 MB` et `Cache saved successfully`, cette fois dans le cache partagé. Le déclencheur `workflow_dispatch` est donc prouvé. **Reste avant fermeture**, d'où `status:blocked` : 2. Premier run de la prochaine PR Rust : il doit restaurer cette entrée partagée (`Restored from cache key … full match: true`). 3. Premier run planifié, lundi 2026-10-05 à 06:30 UTC : vert, avec `Cache up-to-date.` ou `Cache saved successfully` dans le journal, puisqu'une sauvegarde ratée laisse le job vert. 4. Taille de `/home/ubuntu/.cache/actcache` sur le VPS (Max : `du -sh /home/ubuntu/.cache/actcache`). L'issue sera fermée à la main avec ces preuves. Suites hors périmètre : #376.
maximus added
status:blocked
and removed
status:review
labels 2026-10-03 22:22:08 +00:00
Author
Owner

Point 4, premier relevé (Max, 2026-10-03 au soir) : du -sh /home/ubuntu/.cache/actcache donne 2,0 Go.

C'est le total attendu à ce stade : deux entrées de 999 Mo sous la même clé, celle de la PR #375 (run 459, isolée) et celle du cache partagé (run 464). Le ménage du runner ne garde que la plus récente par clé, mais il ne passe qu'à l'occasion d'une requête au cache, au plus une fois par heure, et la dernière requête date du run 464. Le total doit donc redescendre vers 1 Go au prochain passage, au plus tard avec le run planifié du lundi 2026-10-05.

À relever de nouveau après ce run, avec les points 2 et 3, avant de fermer l'issue.

**Point 4, premier relevé (Max, 2026-10-03 au soir)** : `du -sh /home/ubuntu/.cache/actcache` donne **2,0 Go**. C'est le total attendu à ce stade : deux entrées de 999 Mo sous la même clé, celle de la PR #375 (run 459, isolée) et celle du cache partagé (run 464). Le ménage du runner ne garde que la plus récente par clé, mais il ne passe qu'à l'occasion d'une requête au cache, au plus une fois par heure, et la dernière requête date du run 464. Le total doit donc redescendre vers 1 Go au prochain passage, au plus tard avec le run planifié du lundi 2026-10-05. À relever de nouveau après ce run, avec les points 2 et 3, avant de fermer l'issue.
Author
Owner

Point 2 de la liste post-merge : fait (2026-10-04). Premier run check-rust d'une PR Rust depuis le merge de #375 : la PR #386 (#373), run 480 sur 0b94ccf.

Cache Size: ~999 MB (1047376269 B)
Cache restored successfully
Restored from cache key "v0-rust-rust-linux-x64-6448e498-86c598be" full match: true.
test result: ok. 195 passed; 0 failed
Cache up-to-date.

L'entrée partagée écrite par le workflow_dispatch sur main (run 464) est bien lue par une PR, et le job dure 3 min 15 s. Restent les points 3 (premier run planifié du lundi 2026-10-05 à 06:30 UTC, Cache up-to-date. ou Cache saved successfully dans son journal) et 4 (taille de actcache relevée après ce run, attendue vers 1 Go).

**Point 2 de la liste post-merge : fait (2026-10-04).** Premier run `check-rust` d'une PR Rust depuis le merge de #375 : la PR #386 (#373), run 480 sur `0b94ccf`. ``` Cache Size: ~999 MB (1047376269 B) Cache restored successfully Restored from cache key "v0-rust-rust-linux-x64-6448e498-86c598be" full match: true. test result: ok. 195 passed; 0 failed Cache up-to-date. ``` L'entrée partagée écrite par le `workflow_dispatch` sur `main` (run 464) est bien lue par une PR, et le job dure 3 min 15 s. Restent les points 3 (premier run planifié du lundi 2026-10-05 à 06:30 UTC, `Cache up-to-date.` ou `Cache saved successfully` dans son journal) et 4 (taille de `actcache` relevée après ce run, attendue vers 1 Go).
Author
Owner

Point 3 de la liste post-merge : fait. Premier run planifié de check-rust, lundi 2026-10-05 à 06:30 UTC : run 488 sur main, vert en 3 min 27 s.

Cache Size: ~999 MB (1047376269 B)
Restored from cache key "v0-rust-rust-linux-x64-6448e498-86c598be" full match: true.
test result: ok. 192 passed; 0 failed
Cache up-to-date.

La clé n'ayant pas changé, rien n'est réécrit. Les PR Rust #386, #387 et #388 ont toutes restauré cette même entrée (runs 480, 482, 486 et 490).

Reste le point 4 avant la fermeture : relever du -sh /home/ubuntu/.cache/actcache sur le VPS (attendu vers 1 Go, après le passage du ménage du runner).

**Point 3 de la liste post-merge : fait.** Premier run planifié de `check-rust`, lundi 2026-10-05 à 06:30 UTC : run 488 sur `main`, vert en 3 min 27 s. ``` Cache Size: ~999 MB (1047376269 B) Restored from cache key "v0-rust-rust-linux-x64-6448e498-86c598be" full match: true. test result: ok. 192 passed; 0 failed Cache up-to-date. ``` La clé n'ayant pas changé, rien n'est réécrit. Les PR Rust #386, #387 et #388 ont toutes restauré cette même entrée (runs 480, 482, 486 et 490). Reste le point 4 avant la fermeture : relever `du -sh /home/ubuntu/.cache/actcache` sur le VPS (attendu vers 1 Go, après le passage du ménage du runner).
Author
Owner

Point 4 : fait, et #234 est close (2026-10-05). Relevé du dossier de cache du runner, à 23:32 UTC :

999M  /home/ubuntu/.cache/actcache
24K   /home/ubuntu/.cache/actcache/bolt.db
999M  /home/ubuntu/.cache/actcache/cache

Il ne reste qu'une seule entrée. L'entrée isolée de la PR #375 a été évincée par le ménage du runner, qui ne garde qu'une entrée par clé : de 2,0 Go le 2026-10-03, le dossier est passé à 999 Mo. Les PR #386, #387 et #388 n'ont rien réécrit, puisqu'elles ont restauré l'entrée partagée en full match puis fini en Cache up-to-date..

Les quatre preuves de la liste post-merge :

  1. Un workflow_dispatch sur main écrit dans le cache partagé (run 464, commentaire 18971).
  2. Une PR Rust restaure cette entrée partagée en full match: true (PR #386, run 480, commentaire 19473 ; puis runs 482, 486 et 490).
  3. Le run planifié du lundi 2026-10-05 à 06:30 UTC est vert, avec Cache up-to-date. (run 488, 3 min 27 s, commentaire 19667).
  4. La taille sur le VPS est stable, avec une seule entrée de 999 Mo (ci-dessus).

check-rust passe de 9 min 37 s à froid à environ 3 min 20 s par job. Le reste est suivi dans #376.

**Point 4 : fait, et #234 est close (2026-10-05).** Relevé du dossier de cache du runner, à 23:32 UTC : ``` 999M /home/ubuntu/.cache/actcache 24K /home/ubuntu/.cache/actcache/bolt.db 999M /home/ubuntu/.cache/actcache/cache ``` Il ne reste qu'une seule entrée. L'entrée isolée de la PR #375 a été évincée par le ménage du runner, qui ne garde qu'une entrée par clé : de 2,0 Go le 2026-10-03, le dossier est passé à 999 Mo. Les PR #386, #387 et #388 n'ont rien réécrit, puisqu'elles ont restauré l'entrée partagée en `full match` puis fini en `Cache up-to-date.`. **Les quatre preuves de la liste post-merge :** 1. Un `workflow_dispatch` sur `main` écrit dans le cache partagé (run 464, commentaire 18971). 2. Une PR Rust restaure cette entrée partagée en `full match: true` (PR #386, run 480, commentaire 19473 ; puis runs 482, 486 et 490). 3. Le run planifié du lundi 2026-10-05 à 06:30 UTC est vert, avec `Cache up-to-date.` (run 488, 3 min 27 s, commentaire 19667). 4. La taille sur le VPS est stable, avec une seule entrée de 999 Mo (ci-dessus). `check-rust` passe de 9 min 37 s à froid à environ 3 min 20 s par job. Le reste est suivi dans #376.
maximus removed the
status:blocked
label 2026-10-05 23:33:21 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#234
No description provided.