diff --git a/src/Umbraco.Core/Cache/IRepositoryCacheVersionAccessor.cs b/src/Umbraco.Core/Cache/IRepositoryCacheVersionAccessor.cs index 61ae733fe1..af304dc19e 100644 --- a/src/Umbraco.Core/Cache/IRepositoryCacheVersionAccessor.cs +++ b/src/Umbraco.Core/Cache/IRepositoryCacheVersionAccessor.cs @@ -20,7 +20,14 @@ public interface IRepositoryCacheVersionAccessor /// /// The cache version if found, or if the version doesn't exist or the request is a client-side request. /// - public Task GetAsync(string cacheKey); + Task GetAsync(string cacheKey); + + /// + /// Notifies of a version change on a given cache key. + /// + /// Key of the changed version. + void VersionChanged(string cacheKey) + { } /// /// Notifies the accessor that caches have been synchronized. @@ -29,5 +36,5 @@ public interface IRepositoryCacheVersionAccessor /// This method is called after cache synchronization to temporarily bypass version checking, /// preventing recursive sync attempts while repositories reload data from the database. /// - public void CachesSynced(); + void CachesSynced(); } diff --git a/src/Umbraco.Core/Cache/RepositoryCacheVersionService.cs b/src/Umbraco.Core/Cache/RepositoryCacheVersionService.cs index 541e9f032e..09269f92e1 100644 --- a/src/Umbraco.Core/Cache/RepositoryCacheVersionService.cs +++ b/src/Umbraco.Core/Cache/RepositoryCacheVersionService.cs @@ -88,6 +88,7 @@ internal class RepositoryCacheVersionService : IRepositoryCacheVersionService _logger.LogDebug("Setting cache for {EntityType} to version {Version}", typeof(TEntity).Name, newVersion); await _repositoryCacheVersionRepository.SaveAsync(new RepositoryCacheVersion { Identifier = cacheKey, Version = newVersion.ToString() }); _cacheVersions[cacheKey] = newVersion; + _repositoryCacheVersionAccessor.VersionChanged(cacheKey); scope.Complete(); } diff --git a/src/Umbraco.Web.Common/Cache/RepositoryCacheVersionAccessor.cs b/src/Umbraco.Web.Common/Cache/RepositoryCacheVersionAccessor.cs index b96e2546e1..4485c80834 100644 --- a/src/Umbraco.Web.Common/Cache/RepositoryCacheVersionAccessor.cs +++ b/src/Umbraco.Web.Common/Cache/RepositoryCacheVersionAccessor.cs @@ -77,5 +77,17 @@ public class RepositoryCacheVersionAccessor : IRepositoryCacheVersionAccessor return databaseVersion; } + + /// + public void VersionChanged(string cacheKey) + { + var removed = _requestCache.Remove(cacheKey); + if (removed is false) + { + _logger.LogDebug("Cache version for key {CacheKey} wasn't removed from request cache, possibly missing HTTP context", cacheKey); + } + } + + /// public void CachesSynced() => _requestCache.ClearOfType(); }