Repository navigation
Commit 732e0f4
fix(cascade): commit watcher upserts for a path in delivery order (#462)
Each watcher event schedules its own upsert coroutine on the loop, and each
upsert awaits the database, so two events for the same path could commit in
either order and the last committer won. Windows synthesises a 'created' for
every file under a freshly created parent directory, which hands the handler
the same file four or five times; on the Windows soak box one of those stale
duplicates committed after an atomic save's 'added' and put the first write's
mtime and lsn back on the row (test_atomic_replace_over_existing_target_keeps
_the_row_alive failed 1 run in 4, only there).
Serialise the upserts behind one asyncio.Lock per handler; tasks are created
in delivery order and the lock is FIFO, so the row ends with the last event.
The scanner's sweep still writes on its own path.
Verification: the new test fails against the previous watcher with
committed == [m2, m1]; passes with the lock. The six existing watcher tests
pass; lint-imports 4/4.
Co-authored-by: zhanghui <zhanghui@shanda.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: KT <74288668+0xKT@users.noreply.github.com>1 parent 46b63c3 commit 732e0f4
2 files changed
Lines changed: 84 additions & 1 deletion
File tree
- src/everos/memory/cascade
- tests/unit/test_memory/test_cascade
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| |||
78 | 79 | | |
79 | 80 | | |
80 | 81 | | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
81 | 90 | | |
82 | 91 | | |
83 | 92 | | |
| |||
124 | 133 | | |
125 | 134 | | |
126 | 135 | | |
127 | | - | |
| 136 | + | |
128 | 137 | | |
129 | 138 | | |
130 | 139 | | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
131 | 144 | | |
132 | 145 | | |
133 | 146 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
0 commit comments