fix(mesh): 1B.1 review follow-ups

Two review items from Task 1B.1, both diagnostic:

1. CentralCommandGrpcService's "actor not ready" Warning omitted the peer and
   the correlation id while the decode-failure Warning six lines above carried
   both. These are the only two ways an ack fails to reach the coordinator, and
   an operator has to correlate either against the node's own log. Decoding has
   already succeeded on this path, so the DECODED correlation id is free.

2. A fused driver,admin,cluster-MAIN node under Mode=Grpc owes BOTH validator
   surfaces at once (driver keys AND ConfigServe:GrpcListenPort). The two blocks
   are independent `if`s; chained as `else if` a fused central node would be
   graded on one surface only and boot with nowhere for any ack to land. Pinned
   from both sides plus the fully-configured pass.
This commit is contained in:
Joseph Doherty
2026-08-06 05:36:16 -04:00
parent 1368578435
commit e1db90f9c9
3 changed files with 53 additions and 4 deletions
@@ -97,11 +97,17 @@ public sealed class CentralCommandGrpcService : GeneratedServiceBase
if (!_registry.TryGet<CentralCommunicationActorKey>(out var actor))
{
// Peer and correlation id are carried here for the same reason the decode-failure warning
// above carries them: these two rejections are the only ways an ack fails to reach the
// coordinator, and an operator has to correlate either against the node's own log. The
// decode has already succeeded on this path, so the DECODED correlation id is used —
// unlike above, where the raw wire string is the only value guaranteed readable.
_log.LogWarning(
"Received an ApplyAck for {DeploymentId} from {NodeId} before the central "
+ "communication actor was registered on this node; refusing with Unavailable so the "
+ "caller retries rather than recording a failure against a node that applied",
ack.DeploymentId, ack.NodeId);
"Received an ApplyAck for {DeploymentId} (correlation '{CorrelationId}') from {NodeId} "
+ "at {Peer} before the central communication actor was registered on this node; "
+ "refusing with Unavailable so the caller retries rather than recording a failure "
+ "against a node that applied",
ack.DeploymentId, ack.CorrelationId, ack.NodeId, context.Peer);
throw new RpcException(new Status(StatusCode.Unavailable, "central command actor not ready"));
}