Use runtime mode to determine cache TTL for manifest files (#16393)

* Use runtime mode to determine cache TTL for manifest files

* Remove unused manifest settings
This commit is contained in:
Kenn Jacobsen
2024-05-27 10:33:49 +02:00
committed by GitHub
parent 53ca2910fa
commit e7780265fa
4 changed files with 14 additions and 18 deletions

View File

@@ -1,10 +0,0 @@
namespace Umbraco.Cms.Core.Configuration.Models;
/// <summary>
/// Typed configuration options for package manifest settings.
/// </summary>
[UmbracoOptions(Constants.Configuration.ConfigPackageManifests)]
public class PackageManifestSettings
{
public TimeSpan CacheTimeout { get; set; } = TimeSpan.FromMinutes(10);
}

View File

@@ -85,7 +85,6 @@ public static partial class UmbracoBuilderExtensions
.AddUmbracoOptions<ContentDashboardSettings>()
.AddUmbracoOptions<HelpPageSettings>()
.AddUmbracoOptions<DataTypesSettings>()
.AddUmbracoOptions<PackageManifestSettings>()
.AddUmbracoOptions<WebhookSettings>();
// Configure connection string and ensure it's updated when the configuration changes

View File

@@ -10,16 +10,18 @@ internal sealed class PackageManifestService : IPackageManifestService
{
private readonly IEnumerable<IPackageManifestReader> _packageManifestReaders;
private readonly IAppPolicyCache _cache;
private readonly PackageManifestSettings _packageManifestSettings;
private RuntimeSettings _runtimeSettings;
public PackageManifestService(
IEnumerable<IPackageManifestReader> packageManifestReaders,
AppCaches appCaches,
IOptions<PackageManifestSettings> packageManifestSettings)
IOptionsMonitor<RuntimeSettings> runtimeSettingsOptionsMonitor)
{
_packageManifestReaders = packageManifestReaders;
_packageManifestSettings = packageManifestSettings.Value;
_cache = appCaches.RuntimeCache;
_runtimeSettings = runtimeSettingsOptionsMonitor.CurrentValue;
runtimeSettingsOptionsMonitor.OnChange(runtimeSettings => _runtimeSettings = runtimeSettings);
}
public async Task<IEnumerable<PackageManifest>> GetAllPackageManifestsAsync()
@@ -34,7 +36,9 @@ internal sealed class PackageManifestService : IPackageManifestService
return tasks.SelectMany(x => x.Result);
},
_packageManifestSettings.CacheTimeout)
_runtimeSettings.Mode == RuntimeMode.Production
? TimeSpan.FromDays(30)
: TimeSpan.FromSeconds(10))
?? Array.Empty<PackageManifest>();
public async Task<IEnumerable<PackageManifest>> GetPublicPackageManifestsAsync()

View File

@@ -1,10 +1,10 @@
using Microsoft.Extensions.Options;
using Moq;
using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Manifest;
using Umbraco.Cms.Infrastructure.Manifest;
using Umbraco.Cms.Tests.Common;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Manifest;
@@ -32,7 +32,10 @@ public class PackageManifestServiceTests
NoAppCache.Instance,
new IsolatedCaches(type => NoAppCache.Instance));
_service = new PackageManifestService(new[] { _readerMock.Object }, appCaches, new OptionsWrapper<PackageManifestSettings>(new PackageManifestSettings()));
_service = new PackageManifestService(
new[] { _readerMock.Object },
appCaches,
new TestOptionsMonitor<RuntimeSettings>(new RuntimeSettings { Mode = RuntimeMode.Production }));
}
[Test]