review(ControlPlane): fix premature deploy-seal from unexpected-node ack

Review at HEAD 7286d320. ControlPlane-001 (Medium): ConfigPublishCoordinator.HandleAck
now discards acks from nodes not in _expectedAcks (prevented premature SealDeployment) +
regression test. -002 (flipped-node log count), -003 (redundant mapper arms) tidied.
This commit is contained in:
Joseph Doherty
2026-06-19 10:52:22 -04:00
parent 3512089c90
commit 1aa7905676
5 changed files with 181 additions and 13 deletions
@@ -160,6 +160,16 @@ public sealed class ConfigPublishCoordinator : ReceiveActor, IWithTimers
return;
}
// Discard acks from nodes that were not in the expected-ack set at dispatch time.
// Without this guard an unexpected-node ack inflates _acks.Count and can trigger a
// premature seal/fail before every expected node has actually applied the deployment.
if (!_expectedAcks.Contains(msg.NodeId))
{
_log.Debug("Discarding ApplyAck from unexpected node {Node} for {Id} (not in expected set)",
msg.NodeId, msg.DeploymentId);
return;
}
_acks[msg.NodeId] = msg.Outcome;
PersistNodeAck(msg);