Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ internal static IUmbracoBuilder AddInstaller(this IUmbracoBuilder builder)

// Add post migration notification handlers
builder.AddNotificationHandler<UmbracoPlanExecutedNotification, ClearCsrfCookieHandler>();

return builder;
}
}
45 changes: 39 additions & 6 deletions src/Umbraco.Infrastructure/Install/UnattendedUpgrader.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Configuration;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.DependencyInjection;
Expand Down Expand Up @@ -28,21 +30,47 @@ public class UnattendedUpgrader : INotificationAsyncHandler<RuntimeUnattendedUpg
private readonly IRuntimeState _runtimeState;
private readonly IUmbracoVersion _umbracoVersion;
private readonly UnattendedSettings _unattendedSettings;
private readonly DistributedCache _distributedCache;
private readonly ILogger<UnattendedUpgrader> _logger;

[Obsolete("Please use the constructor taking all parameters. Scheduled for removal in Umbraco 19.")]
public UnattendedUpgrader(
IProfilingLogger profilingLogger,
IUmbracoVersion umbracoVersion,
DatabaseBuilder databaseBuilder,
IRuntimeState runtimeState,
PackageMigrationRunner packageMigrationRunner,
IOptions<UnattendedSettings> unattendedSettings)
: this(
profilingLogger,
umbracoVersion,
databaseBuilder,
runtimeState,
packageMigrationRunner,
unattendedSettings,
StaticServiceProvider.Instance.GetRequiredService<DistributedCache>(),
StaticServiceProvider.Instance.GetRequiredService<ILogger<UnattendedUpgrader>>())
{
_profilingLogger = profilingLogger ?? throw new ArgumentNullException(nameof(profilingLogger));
_umbracoVersion = umbracoVersion ?? throw new ArgumentNullException(nameof(umbracoVersion));
_databaseBuilder = databaseBuilder ?? throw new ArgumentNullException(nameof(databaseBuilder));
_runtimeState = runtimeState ?? throw new ArgumentNullException(nameof(runtimeState));
}

public UnattendedUpgrader(
IProfilingLogger profilingLogger,
IUmbracoVersion umbracoVersion,
DatabaseBuilder databaseBuilder,
IRuntimeState runtimeState,
PackageMigrationRunner packageMigrationRunner,
IOptions<UnattendedSettings> unattendedSettings,
DistributedCache distributedCache,
ILogger<UnattendedUpgrader> logger)
{
_profilingLogger = profilingLogger;
_umbracoVersion = umbracoVersion;
_databaseBuilder = databaseBuilder;
_runtimeState = runtimeState;
_packageMigrationRunner = packageMigrationRunner;
_unattendedSettings = unattendedSettings.Value;
_distributedCache = distributedCache;
_logger = logger;
}

public async Task HandleAsync(RuntimeUnattendedUpgradeNotification notification, CancellationToken cancellationToken)
Expand Down Expand Up @@ -109,8 +137,13 @@ private async Task RunPackageMigrationsAsync(RuntimeUnattendedUpgradeNotificatio
try
{
await _packageMigrationRunner.RunPackagePlansAsync(pendingMigrations);
notification.UnattendedUpgradeResult = RuntimeUnattendedUpgradeNotification.UpgradeResult
.PackageMigrationComplete;
notification.UnattendedUpgradeResult = RuntimeUnattendedUpgradeNotification.UpgradeResult.PackageMigrationComplete;

// Migration plans may have changed published content, so refresh the distributed cache to ensure consistency on first request.
_distributedCache.RefreshAllPublishedSnapshot();
_logger.LogInformation(
"Migration plans run: {Plans}. Triggered refresh of distributed published content cache.",
string.Join(", ", pendingMigrations));
}
catch (Exception ex)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public async Task RebuildDatabaseCacheIfSerializerChangedAsync()

_logger.LogWarning(
"Database cache was serialized using {CurrentSerializer}. Currently configured cache serializer {Serializer}. Rebuilding database cache.",
currentSerializer,
currentSerializer == 0 ? "None" : currentSerializer,
serializer);

using (_profilingLogger.TraceDuration<DatabaseCacheRebuilder>($"Rebuilding database cache with {serializer} serializer"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public PublishedContentFactory(
/// <inheritdoc/>
public IPublishedContent? ToIPublishedContent(ContentCacheNode contentCacheNode, bool preview)
{
var cacheKey = $"{nameof(PublishedContentFactory)}DocumentCache_{contentCacheNode.Id}_{preview}";
var cacheKey = $"{nameof(PublishedContentFactory)}DocumentCache_{contentCacheNode.Id}_{preview}_{contentCacheNode.Data?.VersionDate.Ticks ?? 0}";
IPublishedContent? publishedContent = null;
if (_appCaches.RequestCache.IsAvailable)
{
Expand Down