test(windows): native_git_mirror faalt intermitterend op de spiegel-CI (git-timeouts + file-locking) #933

Closed
opened 2026-07-27 23:14:49 +00:00 by brenno · 1 comment
Owner

Op de volledige-matrix-CI van de GitHub-spiegel (Test (windows-2022)) faalt test/native_git_mirror_test.dart intermitterend. Het is bestaande, nondeterministische flakiness — niet door #926/#928 veroorzaakt:

  • run 30294004006: native_git_mirror 30/0 groen;
  • run 30294583984 (main) én 30310360646 (branch #928): telkens 10 tests rood.

Symptomen

De "native commit/push"-groep doet echte git-subprocessen (clone/commit/push/diff) in Directory.systemTemp. Op de Windows-runner:

  • TimeoutException after 0:00:30 — een git-operatie haalt de 30s-testlimiet niet onder gelijktijdige belasting (flutter test draait bestanden parallel; git is traag op Windows-CI).
  • PathAccessException: Deletion failed ... (OS Error: The process cannot access the file because it is being used by another process, errno = 32) — de tearDown (temp.deleteSync(recursive: true)) kan de temp-map niet weg krijgen omdat git (of de virusscanner) nog een handle vasthoudt.
  • Cascade: fatal: destination path '…/seed' already exists and is not an empty directory — een clone in een map die de vorige, mislukte test niet kon opruimen.

Voorgestelde aanpak (te verifiëren via de spiegel-CI, ~46 min/ronde)

  1. Deletie-retry op Windows in tearDown: errno 32 een paar keer met korte pauze opnieuw proberen (bekend Windows-patroon) — breekt de cascade waarin een vastzittende map de volgende test besmet.
  2. Ruimere timeout op Windows voor de git-zware tests (git-subprocessen zijn daar trager onder last).
  3. Zo nodig serialiseren: de contentie is met ándere git-zware testbestanden die tegelijk draaien; overweeg deze groep minder gelijktijdig te draaien.

Aandachtspunt: 3 kan de looptijd van de hele Windows-leg verlengen; weeg af tegen 1+2, die het grootste deel van de cascade al zouden moeten wegnemen. Niet lokaal te reproduceren (macOS), dus verifiëren gaat CI-gated.

Losgekoppeld van #926 (die de 15 deterministische testbugs oploste en gemerged is in #928). Zolang deze flakiness bestaat, blijft de Windows-leg intermitterend rood — zonder release-impact (de echte uitbrengpoort is Forgejo-op-tag op de Mac-runner).

Op de volledige-matrix-CI van de GitHub-spiegel (`Test (windows-2022)`) faalt `test/native_git_mirror_test.dart` **intermitterend**. Het is bestaande, nondeterministische flakiness — niet door #926/#928 veroorzaakt: - run 30294004006: `native_git_mirror` 30/0 groen; - run 30294583984 (main) én 30310360646 (branch #928): telkens 10 tests rood. ## Symptomen De "native commit/push"-groep doet echte `git`-subprocessen (clone/commit/push/diff) in `Directory.systemTemp`. Op de Windows-runner: - `TimeoutException after 0:00:30` — een git-operatie haalt de 30s-testlimiet niet onder gelijktijdige belasting (`flutter test` draait bestanden parallel; git is traag op Windows-CI). - `PathAccessException: Deletion failed ... (OS Error: The process cannot access the file because it is being used by another process, errno = 32)` — de `tearDown` (`temp.deleteSync(recursive: true)`) kan de temp-map niet weg krijgen omdat git (of de virusscanner) nog een handle vasthoudt. - Cascade: `fatal: destination path '…/seed' already exists and is not an empty directory` — een clone in een map die de vorige, mislukte test niet kon opruimen. ## Voorgestelde aanpak (te verifiëren via de spiegel-CI, ~46 min/ronde) 1. **Deletie-retry op Windows** in `tearDown`: errno 32 een paar keer met korte pauze opnieuw proberen (bekend Windows-patroon) — breekt de cascade waarin een vastzittende map de volgende test besmet. 2. **Ruimere timeout op Windows** voor de git-zware tests (git-subprocessen zijn daar trager onder last). 3. **Zo nodig serialiseren**: de contentie is met ándere git-zware testbestanden die tegelijk draaien; overweeg deze groep minder gelijktijdig te draaien. Aandachtspunt: 3 kan de looptijd van de hele Windows-leg verlengen; weeg af tegen 1+2, die het grootste deel van de cascade al zouden moeten wegnemen. Niet lokaal te reproduceren (macOS), dus verifiëren gaat CI-gated. Losgekoppeld van #926 (die de 15 deterministische testbugs oploste en gemerged is in #928). Zolang deze flakiness bestaat, blijft de Windows-leg intermitterend rood — zonder release-impact (de echte uitbrengpoort is Forgejo-op-tag op de Mac-runner).
Author
Owner

Opgelost in #937 (op main als 5f97de9f).

Twee Windows-specifieke oorzaken weggenomen:

  • errno 32 in tearDown — de deleteSync van de tempmap probeert het nu een paar keer opnieuw met een korte pauze (nieuwe hulp test/support/temp_dir.dart) en berust na de laatste poging zonder te gooien, zodat een vastzittende map de volgende test niet meer besmet.
  • TimeoutException after 0:00:30 — een @OnPlatform-annotatie geeft de suite op Windows drie minuten per test; elders blijft de strakke 30s staan.

Aanpak 3 uit de issue (serialiseren) is bewust niet gedaan — achter de hand als de spiegel-CI toch rood blijft. Regressietest voor de herhaal-lus in test/support_temp_dir_test.dart. make check, make check-secrets en make sast groen; niet lokaal te reproduceren (macOS), dus de definitieve bevestiging komt van de Windows-leg van de spiegel-CI.

Opgelost in #937 (op main als 5f97de9f). Twee Windows-specifieke oorzaken weggenomen: - **errno 32 in tearDown** — de `deleteSync` van de tempmap probeert het nu een paar keer opnieuw met een korte pauze (nieuwe hulp `test/support/temp_dir.dart`) en berust na de laatste poging zonder te gooien, zodat een vastzittende map de volgende test niet meer besmet. - **TimeoutException after 0:00:30** — een `@OnPlatform`-annotatie geeft de suite op Windows drie minuten per test; elders blijft de strakke 30s staan. Aanpak 3 uit de issue (serialiseren) is bewust niet gedaan — achter de hand als de spiegel-CI toch rood blijft. Regressietest voor de herhaal-lus in `test/support_temp_dir_test.dart`. `make check`, `make check-secrets` en `make sast` groen; niet lokaal te reproduceren (macOS), dus de definitieve bevestiging komt van de Windows-leg van de spiegel-CI.
Sign in to join this conversation.
No milestone
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
LibreKAT/Ocideck#933
No description provided.