Advertise VPN flow pressure capability
This commit is contained in:
@@ -3273,6 +3273,7 @@ func heartbeatPayload(cfg config.Config, identity state.Identity, meshState *syn
|
||||
payload.Capabilities["vpn_fabric_session_transport"] = true
|
||||
payload.Capabilities["vpn_packet_batch_binary_frames"] = true
|
||||
payload.Capabilities["vpn_fabric_session_stream_shards"] = true
|
||||
payload.Capabilities["vpn_fabric_flow_pressure"] = true
|
||||
if meshState != nil && meshState.VPNFabricEndpointObservations != nil {
|
||||
payload.Metadata["vpn_fabric_endpoint_health_report"] = meshState.VPNFabricEndpointObservations.Report(observedAt, maxVPNFabricEndpointHealthReportEntries)
|
||||
} else {
|
||||
|
||||
@@ -781,6 +781,9 @@ func TestHeartbeatPayloadIncludesMeshEndpointReport(t *testing.T) {
|
||||
if payload.Capabilities["vpn_fabric_session_stream_shards"] != true {
|
||||
t.Fatalf("vpn fabric stream shard capability missing: %+v", payload.Capabilities)
|
||||
}
|
||||
if payload.Capabilities["vpn_fabric_flow_pressure"] != true {
|
||||
t.Fatalf("vpn fabric flow pressure capability missing: %+v", payload.Capabilities)
|
||||
}
|
||||
if payload.Capabilities["vpn_fabric_endpoint_health_feedback"] != true {
|
||||
t.Fatalf("vpn fabric endpoint health capability missing: %+v", payload.Capabilities)
|
||||
}
|
||||
|
||||
@@ -472,6 +472,8 @@ reasons.
|
||||
Heartbeat VPN fabric transport reports now include a compact
|
||||
`flow_pressure` summary with level, score, reasons, bulk pressure, route
|
||||
recovery timing, reason counts, and recommended per-class windows.
|
||||
Nodes advertise the `vpn_fabric_flow_pressure` capability when that heartbeat
|
||||
summary is available.
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user