Commit a37613d
committed
fix(writer): atomic rename in updateUnit prevents hard-link corruption
updateUnit() previously used os.WriteFile(filePath) which writes directly
to the file's inode. When filePath is a hard link (e.g. a test fixture
isolation strategy on same-filesystem setups), this overwrites the shared
inode and silently corrupts the source fixture — a critical latent bug on
single-partition CI environments where /tmp and testdata share a device.
Fix: write to a sibling .tmp file then os.Rename() into place. Rename
replaces the directory entry atomically, leaving the linked inode intact.
This is the same pattern already used by WriteTransaction.WriteUnit().
Also:
- Merge testopen_linux_test.go + testopen_other_test.go → testopen_test.go
(both were functionally identical; dead platform split adds maintenance
overhead with no current benefit)
- Fix waitForAlive() comment: the daemon now binds the socket BEFORE
building the index (lazy init), so IsAlive() returns in ~20 ms, not 5 s
- Add TEST_TIMEOUT (default 180s) to make test and pre-commit hook so
the suite fails fast on hangs; add -p flag to cap concurrent packages
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>1 parent 0c20f6d commit a37613d
6 files changed
Lines changed: 31 additions & 46 deletions
File tree
- .githooks/checks
- internal/expr/daemon
- mdl/executor
- modelsdk/mpr
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
38 | | - | |
| 37 | + | |
| 38 | + | |
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
42 | 45 | | |
43 | 46 | | |
44 | 47 | | |
| |||
167 | 170 | | |
168 | 171 | | |
169 | 172 | | |
170 | | - | |
| 173 | + | |
| 174 | + | |
171 | 175 | | |
172 | | - | |
| 176 | + | |
173 | 177 | | |
174 | 178 | | |
175 | 179 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
20 | | - | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
21 | 24 | | |
22 | 25 | | |
23 | 26 | | |
| |||
This file was deleted.
Lines changed: 6 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
5 | 3 | | |
6 | 4 | | |
7 | 5 | | |
| |||
15 | 13 | | |
16 | 14 | | |
17 | 15 | | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
477 | 477 | | |
478 | 478 | | |
479 | 479 | | |
480 | | - | |
481 | | - | |
482 | | - | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
483 | 491 | | |
484 | 492 | | |
485 | 493 | | |
| |||
0 commit comments