Repair live canonical migrations and scanner cache bootstrap

This commit is contained in:
master
2026-03-09 21:56:41 +02:00
parent 00bf2fa99a
commit dfd22281ed
21 changed files with 1018 additions and 12 deletions

View File

@@ -2,6 +2,7 @@
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using NpgsqlTypes;
using StellaOps.Platform.WebService.Options;
using System;
using System.Threading;
@@ -185,7 +186,11 @@ public sealed class PlatformAnalyticsMaintenanceService : BackgroundService
var startedAt = timeProvider.GetUtcNow();
var executed = await executor.ExecuteNonQueryAsync(
"SELECT analytics.compute_daily_rollups(@date);",
cmd => cmd.Parameters.AddWithValue("date", snapshotDate.Date),
cmd =>
{
var parameter = cmd.Parameters.Add("date", NpgsqlDbType.Date);
parameter.Value = snapshotDate.Date;
},
cancellationToken)
.ConfigureAwait(false);
if (!executed)

View File

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Npgsql;
using NpgsqlTypes;
using StellaOps.Platform.WebService.Options;
using StellaOps.Platform.WebService.Services;
using StellaOps.TestKit;
@@ -60,6 +61,9 @@ public sealed class PlatformAnalyticsMaintenanceServiceTests
.ToArray();
Assert.Equal(expectedDates, actualDates);
Assert.All(
rollupCommands,
command => Assert.Equal(NpgsqlDbType.Date, command.ParameterTypes["date"]));
var refreshCommands = executor.Commands
.Where(command => command.Sql.StartsWith("REFRESH MATERIALIZED VIEW", StringComparison.Ordinal))
@@ -77,7 +81,10 @@ public sealed class PlatformAnalyticsMaintenanceServiceTests
Assert.True(lastRollupIndex < firstRefreshIndex);
}
private sealed record ExecutedCommand(string Sql, IReadOnlyDictionary<string, object?> Parameters);
private sealed record ExecutedCommand(
string Sql,
IReadOnlyDictionary<string, object?> Parameters,
IReadOnlyDictionary<string, NpgsqlDbType> ParameterTypes);
private sealed class RecordingMaintenanceExecutor : IPlatformAnalyticsMaintenanceExecutor
{
@@ -108,8 +115,14 @@ public sealed class PlatformAnalyticsMaintenanceServiceTests
parameter => parameter.ParameterName,
parameter => parameter.Value,
StringComparer.OrdinalIgnoreCase);
var parameterTypes = command.Parameters
.Cast<NpgsqlParameter>()
.ToDictionary(
parameter => parameter.ParameterName,
parameter => parameter.NpgsqlDbType,
StringComparer.OrdinalIgnoreCase);
Commands.Add(new ExecutedCommand(sql, parameters));
Commands.Add(new ExecutedCommand(sql, parameters, parameterTypes));
if (Commands.Count >= expectedCommandCount)
{
completion.TrySetResult(true);