Parallelle poortruns in meerdere worktrees vallen over elkaars native-assets-lock #1541

Closed
opened 2026-08-17 21:02:36 +00:00 by brenno · 1 comment
Owner

Elke git-worktree wijst .dart_tool/hooks_runner/shared als symlink naar de map van de hoofdrepo. Daardoor delen alle worktrees één native-assets-lock (shared/dartcv4/.lock) én één CMake-buildmap.

Waargenomen op 2026-08-17 met vier gelijktijdige make check-runs in verschillende worktrees:

  1. CMake weigert met "The current CMakeCache.txt directory <worktree A>/…/build/<hash>/CMakeCache.txt is different than the directory <worktree B>/… where CMakeCache.txt was created". De cache staat op naam van de worktree die hem het laatst maakte, dus elke wisseling forceert een volledige herbouw van OpenCV.
  2. Die herbouw houdt de lock lang vast, waarna andere runs sneuvelen op "TimeoutException after 0:05:00: Could not acquire the lock to …/dartcv4/.lock". make check faalt dan op een willekeurige poort — check-dead-code, check-method-length, coverage — zonder dat er iets mis is met de wijziging. Dat is de ergste eigenschap: de poort wijst naar de verkeerde plek.

Hoe het zo gekomen is: die symlinks zijn in de sessie van 2026-08-17 met de hand aangelegd om een HTTP 429 van GitHub te omzeilen (het OpenCV-archief was niet meer te downloaden, dus een verse worktree kon de native laag niet bouwen). Dat loste het downloadprobleem op en introduceerde dit.

Te kiezen route:

  • een eigen hooks_runner-map per worktree — voorspelbaar, maar kost ~2 GB per worktree én brengt het downloadprobleem terug;
  • of een expliciet poortslot rond make check, zodat runs netjes op elkaar wachten in plaats van elkaars lock te laten aflopen.

De gekozen route hoort in docs/CHECKS.md, inclusief wat hij níet oplost.

Elke git-worktree wijst `.dart_tool/hooks_runner/shared` als symlink naar de map van de hoofdrepo. Daardoor delen alle worktrees één native-assets-lock (`shared/dartcv4/.lock`) én één CMake-buildmap. Waargenomen op 2026-08-17 met vier gelijktijdige `make check`-runs in verschillende worktrees: 1. **CMake weigert** met *"The current CMakeCache.txt directory `<worktree A>/…/build/<hash>/CMakeCache.txt` is different than the directory `<worktree B>/…` where CMakeCache.txt was created"*. De cache staat op naam van de worktree die hem het laatst maakte, dus elke wisseling forceert een volledige herbouw van OpenCV. 2. **Die herbouw houdt de lock lang vast**, waarna andere runs sneuvelen op *"TimeoutException after 0:05:00: Could not acquire the lock to …/dartcv4/.lock"*. `make check` faalt dan op een willekeurige poort — check-dead-code, check-method-length, coverage — zonder dat er iets mis is met de wijziging. Dat is de ergste eigenschap: de poort wijst naar de verkeerde plek. **Hoe het zo gekomen is:** die symlinks zijn in de sessie van 2026-08-17 met de hand aangelegd om een HTTP 429 van GitHub te omzeilen (het OpenCV-archief was niet meer te downloaden, dus een verse worktree kon de native laag niet bouwen). Dat loste het downloadprobleem op en introduceerde dit. **Te kiezen route:** - een eigen `hooks_runner`-map per worktree — voorspelbaar, maar kost ~2 GB per worktree én brengt het downloadprobleem terug; - of een expliciet poortslot rond `make check`, zodat runs netjes op elkaar wachten in plaats van elkaars lock te laten aflopen. De gekozen route hoort in `docs/CHECKS.md`, inclusief wat hij níet oplost.
Author
Owner

Gemerged in #1542. make check en make check-full draaien nu onder scripts/gate_lock.sh; de route en wat hij níet oplost staan in docs/CHECKS.md.

Gemerged in #1542. `make check` en `make check-full` draaien nu onder `scripts/gate_lock.sh`; de route en wat hij níet oplost staan in `docs/CHECKS.md`.
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#1541
No description provided.