From 3c139d307c2451e8948b890352f237e73b445277 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Sat, 16 May 2026 13:31:31 +0300 Subject: [PATCH] Stabilize VPN flow pressure heartbeat --- agents/rap-node-agent/cmd/rap-node-agent/main.go | 3 +++ docs/architecture/DISTRIBUTED_FABRIC_NODE_PROTOCOL_PLAN.md | 2 ++ 2 files changed, 5 insertions(+) diff --git a/agents/rap-node-agent/cmd/rap-node-agent/main.go b/agents/rap-node-agent/cmd/rap-node-agent/main.go index b033f82..d5aaea8 100644 --- a/agents/rap-node-agent/cmd/rap-node-agent/main.go +++ b/agents/rap-node-agent/cmd/rap-node-agent/main.go @@ -3265,6 +3265,9 @@ func heartbeatPayload(cfg config.Config, identity state.Identity, meshState *syn if meshState != nil && meshState.VPNFabricSessionDialStats != nil { report["dial_stats"] = meshState.VPNFabricSessionDialStats.Report(observedAt) } + report["flow_pressure"] = vpnFabricFlowPressureReport(vpnruntime.FabricFlowSchedulerSnapshot{ + PressureLevel: "nominal", + }) if meshState != nil && meshState.VPNFabricIngress != nil { ingressSnapshot := meshState.VPNFabricIngress.Snapshot(identity.ClusterID) report["flow_pressure"] = vpnFabricFlowPressureReport(ingressSnapshot.FlowScheduler) diff --git a/docs/architecture/DISTRIBUTED_FABRIC_NODE_PROTOCOL_PLAN.md b/docs/architecture/DISTRIBUTED_FABRIC_NODE_PROTOCOL_PLAN.md index 49707ba..37e92e2 100644 --- a/docs/architecture/DISTRIBUTED_FABRIC_NODE_PROTOCOL_PLAN.md +++ b/docs/architecture/DISTRIBUTED_FABRIC_NODE_PROTOCOL_PLAN.md @@ -474,6 +474,8 @@ Heartbeat VPN fabric transport reports now include a compact recovery timing, reason counts, and recommended per-class windows. Nodes advertise the `vpn_fabric_flow_pressure` capability when that heartbeat summary is available. +When the VPN fabric ingress runtime has not been initialized yet, the heartbeat +still emits a nominal `flow_pressure` summary for schema stability. Endpoint ranking treats `capacity_limited` observations as a soft pressure penalty instead of a hard recent failure, enabling load spreading without marking the carrier unhealthy.