refactor(driver-pages): address post-review follow-ups

- DriverInstanceSpec carries ClusterId from the deployment artifact;
  DriverHostActor threads the real cluster identity into
  DriverInstanceActor instead of the local NodeId. Old pre-PR
  artifacts without a ClusterId field fall back to the NodeId so
  in-flight deployments keep working.
- DriverHostActor.ChildEntry holds the full DriverInstanceSpec
  (was only carrying DriverType + LastConfigJson). Restart respawns
  preserve RowId, Name, Enabled, ClusterId — no placeholder values.
- Drop the unnecessary _faultLock on DriverInstanceActor — every
  read/write site runs inside an Akka message handler which is
  single-threaded per actor instance.
- DriverStatusPanel.DisposeAsync awaits Timer.DisposeAsync so an
  in-flight 5s tick can't invoke StateHasChanged on a component
  whose hub has already been torn down.
This commit is contained in:
Joseph Doherty
2026-05-28 11:41:46 -04:00
parent 64e4726fff
commit dcd2509548
4 changed files with 35 additions and 33 deletions
@@ -15,7 +15,8 @@ public sealed record DriverInstanceSpec(
string Name,
string DriverType,
bool Enabled,
string DriverConfig);
string DriverConfig,
string? ClusterId = null);
public static class DeploymentArtifact
{
@@ -66,6 +67,7 @@ public static class DeploymentArtifact
var type = el.TryGetProperty("DriverType", out var typeEl) ? typeEl.GetString() : null;
var enabled = !el.TryGetProperty("Enabled", out var enEl) || enEl.GetBoolean();
var config = el.TryGetProperty("DriverConfig", out var cfgEl) ? cfgEl.GetString() : null;
var clusterId = el.TryGetProperty("ClusterId", out var clEl) ? clEl.GetString() : null;
if (string.IsNullOrWhiteSpace(id) || string.IsNullOrWhiteSpace(type)) return null;
@@ -75,7 +77,8 @@ public static class DeploymentArtifact
Name: name ?? id!,
DriverType: type!,
Enabled: enabled,
DriverConfig: config ?? "{}");
DriverConfig: config ?? "{}",
ClusterId: clusterId);
}
/// <summary>