mirror of
https://github.com/navidrome/navidrome.git
synced 2026-10-08 02:17:25 +02:00
* feat(cache): add completion marker helpers to spreadFS * feat(cache): write completion marker after successful cache write * fix(cache): adopt only complete files on reload, grandfather existing caches * test(cache): regression tests for partial-transcode crash leftover (#5636) * test(cache): guard concurrent in-progress streaming with completion marker * test(cache): make concurrent-streaming guard actually attach a second reader mid-write The previous test obtained s2 only after pw.Close(), so no reader ever attached to the in-progress entry. Now pw.Write("hello ") is called synchronously before the second Get — io.Pipe's blocking write gives a deterministic happens-before — then both s1 and s2 are drained in parallel goroutines while the producer writes the rest and closes the pipe. * style(cache): clarify best-effort intent of cleanup os.Remove calls * refactor(cache): lift one-time grandfather pass out of Reload's steady-state loop * refactor(cache): have MarkComplete take the key, owning path mapping in spreadFS * test(cache): assert no completion marker is written when the write fails * refactor(cache): rename migration sentinel to generic .nd-migrated * refactor(cache): rename grandfather migration to migrateExistingFiles * refactor(cache): single-pass Reload with safer marker-error handling Address PR review feedback: - Merge the one-time migration into Reload's single directory walk, avoiding a second full walk on first boot. - Only delete a data file when its marker is definitively absent (os.IsNotExist); skip on other stat errors to avoid destroying valid entries under transient I/O failures. - Write the migration sentinel only after a clean walk, so a partial walk can't strand valid-but-unmarked files for later deletion. - Return early from walkDataFiles on a WalkDir error. - Assert fs.Create error in the marker-removal test. |
||
|---|---|---|
| .. | ||
| cache | ||
| chrono | ||
| gg | ||
| gravatar | ||
| hasher | ||
| ioutils | ||
| jsoncommentstrip | ||
| merge | ||
| nanoid | ||
| natural | ||
| number | ||
| pl | ||
| random | ||
| req | ||
| run | ||
| shellquote | ||
| singleton | ||
| slice | ||
| str | ||
| context.go | ||
| context_test.go | ||
| encrypt.go | ||
| encrypt_test.go | ||
| files.go | ||
| files_test.go | ||
| index_group_parser.go | ||
| index_group_parser_test.go | ||
| limiter.go | ||
| time.go | ||
| time_test.go | ||
| utils_suite_test.go | ||