navidrome/core
Deluan d513b1ea48 fix(artwork): stop a stuck item from stalling its drain pool
Worker.drain waits for every item in a batch before it dequeues the next
one, so a single item that never returns stops the whole pool. This is what
happened in discussion #6232: filepath.Rel looped forever on a UNC share
root, and all artist artwork stopped. Go can't stop a goroutine that
spins, so the only way to keep the pool going is to stop waiting.

process now runs acquire in its own goroutine and waits at most
itemTimeout (5 minutes). On timeout it logs an error, adds a trace step,
and settles the row as failed, so the normal backoff and give-up budget
apply. A per-worker busy set keeps one item from running twice at the
same time: if the row comes due again while the old run is still stuck,
it is settled as failed without starting a second run. This keeps the
existing guarantee that the drain resolves each item serially.

Shutdown still waits for in-flight items, but now at most itemTimeout
for one that is stuck.
2026-09-27 15:39:16 -04:00
..
agents refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
artwork fix(artwork): stop a stuck item from stalling its drain pool 2026-09-27 15:39:16 -04:00
auth refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
external refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
ffmpeg refactor(scanner): remove the unused legacy ffmpeg metadata extractor (#6231) 2026-09-26 12:30:52 -04:00
lyrics refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
matcher refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
metrics refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
playback refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
playlists fix(windows): avoid filepath.Rel hang on UNC share roots 2026-09-27 15:25:19 -04:00
publicurl fix(plugins): build public URLs on the caller's address instead of localhost (#6059) 2026-08-31 21:27:43 -04:00
quickconnect feat(jellyfin): add Quick Connect sign-in (#6174) 2026-09-19 14:57:01 -04:00
scrobbler refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
sonic refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
storage fix: miscellaneous fixes for shares, artwork resize, auth limits, and watcher start (#6098) 2026-09-11 15:03:54 -04:00
stream refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
archiver.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
archiver_test.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
common.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
common_test.go test: unskip path-separator tests on Windows (#5381) (#5916) 2026-08-19 11:50:32 -04:00
core_suite_test.go Rename log.LevelCritical to log.LevelFatal 2022-12-21 14:53:36 -05:00
inspect.go refactor: multiple syntax updates for Go 1.26 2026-05-19 18:02:36 -03:00
library.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
library_test.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
maintenance.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
maintenance_test.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
players.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
players_test.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
share.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
share_test.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
user.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
user_test.go refactor(persistence): stateless repositories with per-call context (#6149) 2026-09-25 18:06:10 -04:00
wire_providers.go feat(jellyfin): add Quick Connect sign-in (#6174) 2026-09-19 14:57:01 -04:00