Repair live canonical migrations and scanner cache bootstrap
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user