unkinben
0008bde28e
Gate periodic library-mutating tasks behind a scan-leader lease
...
ABI Compatibility / ABI - HEAD (pull_request) Has been cancelled
ABI Compatibility / ABI - BASE (pull_request) Has been cancelled
OpenAPI / OpenAPI - HEAD (pull_request) Has been cancelled
OpenAPI / OpenAPI - BASE (pull_request) Has been cancelled
Tests / run-phase5-tests (pull_request) Has been cancelled
Tests / run-tests (pull_request) Has been cancelled
Project Automation / Project board (pull_request) Has been cancelled
Merge Conflict Labeler / Labeling (pull_request) Has been cancelled
ABI Compatibility / ABI - Difference (pull_request) Has been cancelled
OpenAPI / OpenAPI - Difference (pull_request) Has been cancelled
OpenAPI / OpenAPI - Publish Unstable Spec (pull_request) Has been cancelled
OpenAPI / OpenAPI - Publish Stable Spec (pull_request) Has been cancelled
In a multi-pod deployment every pod runs the scheduled-task timers, so
periodic library-mutating tasks (library refresh, people/chapter refresh,
audio normalization, media-segment and keyframe extraction, collection and
user-data cleanup, database optimization) fire concurrently against the shared
database and library, duplicating work and racing each other.
Add an IScanLeaderLease abstraction that elects a single scan leader via a
Redis TTL lease keyed on the pod identity, mirroring the existing transcode
lease machinery. RedisScanLeaderLease acquires or renews the lease with an
atomic Lua script and fails safe by treating the pod as leader whenever Redis
is unreachable, so scans never stall. NullScanLeaderLease preserves the
single-instance behavior when election is disabled or no Redis connection is
configured.
Gate only the timer-driven path in ScheduledTaskWorker: when election is
enabled and a task key is in the gated set, a non-leader re-arms its trigger
and skips enqueueing. Manual and API-triggered runs bypass this path and still
run on any pod. Wiring is additive and the new worker constructor parameters
are optional, so existing behavior is unchanged when election is off.
Signed-off-by: Ben Vincent <ben@unkin.net >
2026-08-10 23:51:18 +10:00
Copilot
e71efc3f97
Fix SessionManager._activeLiveStreamSessions for HA pod takeover safety ( #27 )
...
* Initial plan
* Issue 5.2.3b: Fix SessionManager._activeLiveStreamSessions for takeover safety
Co-authored-by: ZoltyMat <177592743+ZoltyMat@users.noreply.github.com >
* ci: trigger CI run for PR #27 review
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: ZoltyMat <177592743+ZoltyMat@users.noreply.github.com >
Co-authored-by: mat <mstrommen@gmail.com >
2026-03-31 22:56:30 -04:00
Copilot
9817185fa3
Add lease-aware cleanup to DeleteTranscodeFileTask ( #25 )
...
* Initial plan
* Add GetActiveSessionsAsync to ITranscodeSessionStore and update DeleteTranscodeFileTask for lease-aware cleanup
Co-authored-by: ZoltyMat <177592743+ZoltyMat@users.noreply.github.com >
* Fix Redis exception propagation in GetActiveSessionsAsync for safe abort behavior
Co-authored-by: ZoltyMat <177592743+ZoltyMat@users.noreply.github.com >
* fix: use KeysAsync to resolve CA1849 analyzer violation
Replace synchronous IServer.Keys() with async IServer.KeysAsync()
using await foreach to satisfy CA1849 (TreatWarningsAsErrors).
CA1849: 'IServer.Keys()' synchronously blocks.
Await 'IServer.KeysAsync()' instead.
Line 161 in RedisTranscodeSessionStore.GetActiveSessionsAsync.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: ZoltyMat <177592743+ZoltyMat@users.noreply.github.com >
Co-authored-by: mat <mstrommen@gmail.com >
2026-03-31 22:56:30 -04:00
Copilot
d60ae43b59
Wire ITranscodeSessionStore to Redis-backed impl with NullTranscodeSessionStore fallback and DI registration ( #21 )
...
* Initial plan
* feat: add Redis-backed ITranscodeSessionStore with NullTranscodeSessionStore fallback and DI registration
Co-authored-by: ZoltyMat <177592743+ZoltyMat@users.noreply.github.com >
* refactor: add code review improvements - lease expiry comment, Redis connection error handling
Co-authored-by: ZoltyMat <177592743+ZoltyMat@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: ZoltyMat <177592743+ZoltyMat@users.noreply.github.com >
2026-03-31 22:56:30 -04:00
theguymadmax
1b2d9c100a
Skip image checks for empty folders
2026-02-12 18:04:27 -05:00
Niels van Velzen
d41e302418
Fix SessionInfoWebSocketListener not using SessionInfoDto
2026-01-25 21:21:48 +01:00
theguymadmax
644327eb76
Revert hidden directory ignore pattern ( #16077 )
2026-01-22 17:39:55 -07:00
Joshua M. Boniface
a2b1936e73
Merge pull request #15816 from theguymadmax/preserve-artist-order
...
Fix artist display order
2026-01-18 19:48:17 -05:00
theguymadmax
2df546af6d
Deduplicate using Distinct
2026-01-18 18:16:45 -05:00
theguymadmax
2943bb6fdd
Restore collection folder image refresh
2026-01-18 01:51:51 -05:00
theguymadmax
94edcbd2d1
Fix artist ordering DtoServices
2026-01-17 10:14:41 -05:00
Collin T Swisher
22d593b8e9
Add mblink creation logic to library update endpoint. ( #15965 )
2026-01-16 18:47:04 -07:00
theguymadmax
2cb7fb52d2
Skip hidden directories and .ignore paths in library monitoring ( #16029 )
2026-01-16 18:45:19 -07:00
Joshua M. Boniface
8433b6d8a4
Merge pull request #15899 from MarcoCoreDuo/fix-watch-state-not-kept
...
Fix watched state not kept on Media replace/rename
2026-01-16 16:40:36 -05:00
theguymadmax
845b8cdc8f
Fix crash when plugin repository has an invalid URL
2026-01-06 11:57:25 -05:00
MarcoCoreDuo
09a1c31fa3
Refactor ReattachUserData methods to be asynchronous
2025-12-31 03:06:07 +01:00
MarcoCoreDuo
e4b82025b8
move reattaching user data to own function and call it only after fetching metadata for the first time
2025-12-30 22:04:59 +01:00
Tim Eisele
156761405e
Prefer US rating on fallback ( #15793 )
2025-12-19 20:41:09 -07:00
Claus Vium
1805f2259f
add CultureDto cache ( #15826 )
2025-12-19 20:38:54 -07:00
Tim Eisele
6e60634c9f
Skip invalid ignore rules ( #15746 )
2025-12-13 08:39:49 -07:00
gnattu
4c5a3fbff3
Use original name for MusicAritist matching ( #15689 )
2025-12-05 19:30:02 -07:00
MBR-0001
daca285568
Revert "Localization/iso6392.txt: change pob and pop" ( #15555 )
2025-11-23 19:20:29 +01:00
theguymadmax
5ae444d96d
Fix NullReferenceException in filesystem path comparison ( #15548 )
2025-11-18 18:37:09 -07:00
theguymadmax
def5956cd1
Fix tmdbid not detected in single movie folder ( #14955 )
2025-11-16 13:36:35 -07:00
theguymadmax
078f9584ed
Fix playlist DateCreated and DateLastMediaAdded not being set ( #15508 )
2025-11-14 15:19:40 -07:00
theguymadmax
e8150428b6
Fix .ignore handling for directories ( #15501 )
2025-11-13 18:23:18 -07:00
Huo Jiacheng
435bb14bb2
Fix gitignore-style not working properly on windows. ( #15487 )
2025-11-12 19:43:13 -07:00
Bond-009
f4a846aa4d
Don't error out when searching for marker files fails ( #15466 )
...
Fixes #15445
2025-11-11 15:45:47 -07:00
theguymadmax
511223aac4
Fix NullReferenceException in GetPathProtocol when path is null
2025-11-10 02:30:49 -05:00
Mikal S.
3b2d64995a
Resolve symlinks for static media source infos ( #15263 )
2025-11-09 09:45:02 -07:00
theguymadmax
49efd68fc7
Invalidate parent folder's cache on deletion/creation ( #15423 )
2025-11-08 08:30:04 -07:00
Tim Eisele
e5656af1f2
Improve symlink handling ( #15209 )
2025-10-26 15:10:13 -06:00
CeruleanRed
442af96ed9
Only save chapters that are within the runtime of the video file ( #15176 )
2025-10-26 10:37:16 -06:00
Cody Robibero
5691eee4f1
Prefer filting by package id instead of name ( #15197 )
2025-10-25 09:37:09 -06:00
theguymadmax
1520a697ad
Play selected song first with instant mix ( #15133 )
2025-10-25 09:33:11 -06:00
Tim Eisele
ca830d5be7
Speed-up trickplay migration ( #15054 )
2025-10-23 16:37:47 -06:00
rimasx
fc056b6273
Translated using Weblate (Estonian)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/
2025-10-19 05:33:11 +00:00
rimasx
ac5efb4775
Translated using Weblate (Estonian)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/
2025-10-18 11:54:27 +00:00
Tim Eisele
5c519270b8
Remove chapters on file change ( #14984 )
2025-10-13 12:32:41 -06:00
kreaxv
27c9c9c0ed
Translated using Weblate (Mongolian)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/mn/
2025-10-13 12:42:46 +00:00
rimasx
68636b2390
Translated using Weblate (Estonian)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/
2025-10-12 18:15:54 +00:00
Joshua M. Boniface
c88d792963
Merge pull request #14960 from karm235/13697-fix-lufs-detection
...
Fix LUFS detection deadlock per issue #13697
2025-10-11 17:20:52 -04:00
rimasx
056c318f04
Translated using Weblate (Estonian)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/
2025-10-11 11:46:41 +00:00
rimasx
864d6d0b8f
Translated using Weblate (Estonian)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/
2025-10-10 10:58:43 +00:00
faquino
a565e4896e
Translated using Weblate (Galician)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/gl/
2025-10-10 10:58:43 +00:00
taham
e876e784da
Translated using Weblate (Urdu)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ur/
2025-10-10 05:25:11 +00:00
taham
9b7d5edc86
Translated using Weblate (Urdu (Pakistan))
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ur_PK/
2025-10-10 05:25:10 +00:00
rimasx
8c51920911
Translated using Weblate (Estonian)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/
2025-10-09 12:39:38 +00:00
faquino
8f2fd65810
Translated using Weblate (Galician)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/gl/
2025-10-09 12:39:38 +00:00
rimasx
953659980f
Translated using Weblate (Estonian)
...
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/et/
2025-10-09 10:47:27 +00:00