From d2df6adc161d3f4a3804d19cd600a84f71b45778 Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Sat, 18 Oct 2025 14:07:39 -0400 Subject: [PATCH 1/2] Fix stale UserData cache --- .../Library/UserDataManager.cs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Emby.Server.Implementations/Library/UserDataManager.cs b/Emby.Server.Implementations/Library/UserDataManager.cs index 72c8d7a9d2..0aa8833294 100644 --- a/Emby.Server.Implementations/Library/UserDataManager.cs +++ b/Emby.Server.Implementations/Library/UserDataManager.cs @@ -236,12 +236,20 @@ namespace Emby.Server.Implementations.Library } /// - public UserItemData? GetUserData(User user, BaseItem item) + public UserItemData GetUserData(User user, BaseItem item) { - return item.UserData?.Where(e => e.UserId.Equals(user.Id)).Select(Map).FirstOrDefault() ?? new UserItemData() + var cacheKey = GetCacheKey(user.InternalId, item.Id); + if (_cache.TryGet(cacheKey, out var cachedData)) { - Key = item.GetUserDataKeys()[0], - }; + return cachedData; + } + + var data = item.UserData?.Where(e => e.UserId.Equals(user.Id)).Select(Map).FirstOrDefault() ?? new UserItemData() + { + Key = item.GetUserDataKeys()[0], + }; + + return _cache.GetOrAdd(cacheKey, _ => data); } /// From 94d0f7b1ac66ca964673e0bbb95915a06cd45647 Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Thu, 21 May 2026 19:04:51 -0400 Subject: [PATCH 2/2] Apply review feedback --- .../Library/UserDataManager.cs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Emby.Server.Implementations/Library/UserDataManager.cs b/Emby.Server.Implementations/Library/UserDataManager.cs index 0aa8833294..45a5e1ef94 100644 --- a/Emby.Server.Implementations/Library/UserDataManager.cs +++ b/Emby.Server.Implementations/Library/UserDataManager.cs @@ -239,17 +239,13 @@ namespace Emby.Server.Implementations.Library public UserItemData GetUserData(User user, BaseItem item) { var cacheKey = GetCacheKey(user.InternalId, item.Id); - if (_cache.TryGet(cacheKey, out var cachedData)) - { - return cachedData; - } - - var data = item.UserData?.Where(e => e.UserId.Equals(user.Id)).Select(Map).FirstOrDefault() ?? new UserItemData() + return _cache.GetOrAdd( + cacheKey, + (k, i) => i.UserData?.Where(e => e.UserId.Equals(user.Id)).Select(Map).FirstOrDefault() ?? new UserItemData() { - Key = item.GetUserDataKeys()[0], - }; - - return _cache.GetOrAdd(cacheKey, _ => data); + Key = i.GetUserDataKeys()[0], + }, + item); } ///