d979ac69eb
The sibling of #521's DriverHostStatus, dead for exactly the same reason. Before this change the only reference in the entire repo was the DriverInstanceResilienceStatuses DbSet declaration: no writer, no reader, and the table empty on every deployment. Its entity doc described two components that were never built — a HostedService sampling the tracker every ~5 s into this table, and an AdminUI that left-joined it on DriverHostStatus for display. There is no sampler, that join exists in no razor file, and DriverHostStatus itself was removed in #521. Per-cluster mesh Phase 4 also makes the design unbuildable now: AddOtOpcUaConfigDb is gated on the admin role, so a driver-only node has no ConfigDb connection to write rows with. Any per-node runtime-status table has this problem. The live data was never missing — it just does not go through SQL. Resilience counters reach the AdminUI's DriverStatusPanel as DriverResilienceStatusChanged over the driver-resilience-status telemetry channel into the in-memory IDriverResilienceStatusStore. Verified consumed: the panel injects the store, fed by both DriverResilienceStatusBridge (DPS) and TelemetryDialSupervisor (gRPC). If breaker HISTORY across a central restart is ever wanted — the one thing the last-value-only store cannot give — it needs a CENTRAL-side writer fed by that stream, never a driver-node writer. Keeping an empty table now bought nothing toward that. Migration DropDriverInstanceResilienceStatusTable; the scaffolder's data-loss warning cannot bite on a table nothing ever inserted into, and Down() recreates it exactly. Also corrected: DriverResilienceStatusTracker's doc-comment claimed CurrentInFlight fed DriverInstanceResilienceStatus.CurrentBulkheadDepth "until the full telemetry observer lands". The observer landed in Phase 5; the table never had a writer. Claude-Session: https://claude.ai/code/session_015p7wGqy3YpZNCpDzTpGMKo
56 lines
2.8 KiB
C#
56 lines
2.8 KiB
C#
using System;
|
|
using Microsoft.EntityFrameworkCore.Migrations;
|
|
|
|
#nullable disable
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.Configuration.Migrations
|
|
{
|
|
/// <summary>
|
|
/// Drops the DriverInstanceResilienceStatus table (Gitea #524) — the sibling of #521's
|
|
/// DriverHostStatus, dead for the same reason. No code ever inserted a row: the HostedService
|
|
/// sampler its entity doc described was never written, and per-cluster mesh Phase 4 made it
|
|
/// unbuildable as designed, since a driver-only node has no ConfigDb connection. Every
|
|
/// deployment's copy of this table is empty, so the scaffolder's data-loss warning cannot bite.
|
|
/// Live breaker / in-flight counters reach the AdminUI's driver status panel as
|
|
/// DriverResilienceStatusChanged over the driver-resilience-status telemetry channel.
|
|
/// Down() recreates the table exactly, so the rollback is lossless too.
|
|
/// </summary>
|
|
public partial class DropDriverInstanceResilienceStatusTable : Migration
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void Up(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.DropTable(
|
|
name: "DriverInstanceResilienceStatus");
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
protected override void Down(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.CreateTable(
|
|
name: "DriverInstanceResilienceStatus",
|
|
columns: table => new
|
|
{
|
|
DriverInstanceId = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
|
|
HostName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
|
|
BaselineFootprintBytes = table.Column<long>(type: "bigint", nullable: false),
|
|
ConsecutiveFailures = table.Column<int>(type: "int", nullable: false),
|
|
CurrentBulkheadDepth = table.Column<int>(type: "int", nullable: false),
|
|
CurrentFootprintBytes = table.Column<long>(type: "bigint", nullable: false),
|
|
LastCircuitBreakerOpenUtc = table.Column<DateTime>(type: "datetime2(3)", nullable: true),
|
|
LastRecycleUtc = table.Column<DateTime>(type: "datetime2(3)", nullable: true),
|
|
LastSampledUtc = table.Column<DateTime>(type: "datetime2(3)", nullable: false)
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_DriverInstanceResilienceStatus", x => new { x.DriverInstanceId, x.HostName });
|
|
});
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_DriverResilience_LastSampled",
|
|
table: "DriverInstanceResilienceStatus",
|
|
column: "LastSampledUtc");
|
|
}
|
|
}
|
|
}
|