fix(mesh-phase5): dial supervisor — re-dial on endpoint change, pin no-restart invariant, throttle skip warnings

Claude-Session: https://claude.ai/code/session_01GASWkNEi68FSCtvr6rLoEW
This commit is contained in:
Joseph Doherty
2026-07-23 16:43:09 -04:00
parent ffb75b7854
commit 84fa2e1e43
3 changed files with 91 additions and 13 deletions
@@ -29,6 +29,10 @@ public static class TelemetryNodeSource
ArgumentNullException.ThrowIfNull(dbFactory);
ArgumentNullException.ThrowIfNull(logger);
// A persistently null-GrpcPort node is skipped on every refresh (every ContactRefreshSeconds);
// warn once per node id so it does not spam the log forever.
var warnedNullPort = new HashSet<string>(StringComparer.Ordinal);
return async () =>
{
await using var db = await dbFactory.CreateDbContextAsync().ConfigureAwait(false);
@@ -44,9 +48,14 @@ public static class TelemetryNodeSource
{
if (row.GrpcPort is null)
{
logger.LogWarning(
"ClusterNode {NodeId} has no GrpcPort; it exposes no telemetry stream and is "
+ "skipped in this dial refresh", row.NodeId);
if (warnedNullPort.Add(row.NodeId))
{
logger.LogWarning(
"ClusterNode {NodeId} has no GrpcPort; it exposes no telemetry stream and is "
+ "skipped in this dial refresh (further skips of this node are silent)",
row.NodeId);
}
continue;
}