Configure QUIC fabric stream limits
This commit is contained in:
@@ -1095,7 +1095,7 @@ func startSyntheticMeshEndpoint(ctx context.Context, _ context.CancelFunc, cfg c
|
||||
VPNFabricIngress: vpnFabricIngress,
|
||||
VPNFabricSessionPeers: vpnFabricSessionPeers,
|
||||
VPNFabricTransport: mesh.NewWebSocketFabricTransport(vpnFabricSessionPeers),
|
||||
VPNFabricQUICTransport: mesh.NewQUICFabricTransport(nil),
|
||||
VPNFabricQUICTransport: newVPNFabricQUICTransport(cfg),
|
||||
VPNFabricSessionDialStats: newVPNFabricSessionDialStats(),
|
||||
VPNFabricEndpointObservations: newVPNFabricEndpointObservationStore(identity.NodeID),
|
||||
PeerEndpoints: copyStringMap(peerEndpoints),
|
||||
@@ -1151,6 +1151,14 @@ func newVPNFabricIngress(meshState *syntheticMeshState, identity state.Identity,
|
||||
return ingress
|
||||
}
|
||||
|
||||
func newVPNFabricQUICTransport(cfg config.Config) *mesh.QUICFabricTransport {
|
||||
transport := mesh.NewQUICFabricTransport(nil)
|
||||
if cfg.VPNFabricQUICMaxStreamsPerConn > 0 {
|
||||
transport.MaxStreamsPerConn = cfg.VPNFabricQUICMaxStreamsPerConn
|
||||
}
|
||||
return transport
|
||||
}
|
||||
|
||||
func vpnruntimeAdaptivePolicy(policy *client.FabricServiceChannelAdaptivePolicy) vpnruntime.FabricServiceChannelAdaptivePolicy {
|
||||
if policy == nil {
|
||||
return vpnruntime.FabricServiceChannelAdaptivePolicy{}
|
||||
@@ -1991,7 +1999,7 @@ func applyRefreshedSyntheticMeshConfig(ctx context.Context, cfg config.Config, i
|
||||
}
|
||||
meshState.VPNFabricSessionPeers = mesh.NewFabricSessionPeerManager()
|
||||
meshState.VPNFabricTransport = mesh.NewWebSocketFabricTransport(meshState.VPNFabricSessionPeers)
|
||||
meshState.VPNFabricQUICTransport = mesh.NewQUICFabricTransport(nil)
|
||||
meshState.VPNFabricQUICTransport = newVPNFabricQUICTransport(cfg)
|
||||
}
|
||||
if meshState.VPNFabricSessionPeers == nil {
|
||||
meshState.VPNFabricSessionPeers = mesh.NewFabricSessionPeerManager()
|
||||
@@ -2000,7 +2008,9 @@ func applyRefreshedSyntheticMeshConfig(ctx context.Context, cfg config.Config, i
|
||||
meshState.VPNFabricTransport = mesh.NewWebSocketFabricTransport(meshState.VPNFabricSessionPeers)
|
||||
}
|
||||
if meshState.VPNFabricQUICTransport == nil {
|
||||
meshState.VPNFabricQUICTransport = mesh.NewQUICFabricTransport(nil)
|
||||
meshState.VPNFabricQUICTransport = newVPNFabricQUICTransport(cfg)
|
||||
} else if cfg.VPNFabricQUICMaxStreamsPerConn > 0 {
|
||||
meshState.VPNFabricQUICTransport.MaxStreamsPerConn = cfg.VPNFabricQUICMaxStreamsPerConn
|
||||
}
|
||||
if meshState.VPNFabricSessionDialStats == nil {
|
||||
meshState.VPNFabricSessionDialStats = newVPNFabricSessionDialStats()
|
||||
@@ -2965,7 +2975,9 @@ func heartbeatPayload(cfg config.Config, identity state.Identity, meshState *syn
|
||||
report["peer_sessions"] = meshState.VPNFabricSessionPeers.Snapshot()
|
||||
}
|
||||
if meshState != nil && meshState.VPNFabricQUICTransport != nil {
|
||||
report["quic_sessions"] = meshState.VPNFabricQUICTransport.Snapshot()
|
||||
quicSnapshot := meshState.VPNFabricQUICTransport.Snapshot()
|
||||
report["quic_sessions"] = quicSnapshot
|
||||
report["quic_max_streams_per_conn"] = meshState.VPNFabricQUICTransport.MaxStreamsPerConn
|
||||
}
|
||||
if meshState != nil && meshState.VPNFabricSessionDialStats != nil {
|
||||
report["dial_stats"] = meshState.VPNFabricSessionDialStats.Report(observedAt)
|
||||
|
||||
@@ -707,6 +707,7 @@ func TestHeartbeatPayloadIncludesMeshEndpointReport(t *testing.T) {
|
||||
MeshProductionForwardingEnabled: true,
|
||||
MeshFabricSessionEnabled: true,
|
||||
VPNFabricSessionTransportEnabled: true,
|
||||
VPNFabricQUICMaxStreamsPerConn: 24,
|
||||
MeshQUICFabricEnabled: true,
|
||||
MeshQUICFabricListenAddr: ":19443",
|
||||
}, state.Identity{
|
||||
@@ -714,7 +715,12 @@ func TestHeartbeatPayloadIncludesMeshEndpointReport(t *testing.T) {
|
||||
NodeID: "node-a",
|
||||
}, &syntheticMeshState{
|
||||
VPNFabricSessionPeers: mesh.NewFabricSessionPeerManager(),
|
||||
QUICFabricListenAddr: "127.0.0.1:19443",
|
||||
VPNFabricQUICTransport: func() *mesh.QUICFabricTransport {
|
||||
transport := mesh.NewQUICFabricTransport(nil)
|
||||
transport.MaxStreamsPerConn = 24
|
||||
return transport
|
||||
}(),
|
||||
QUICFabricListenAddr: "127.0.0.1:19443",
|
||||
}, time.Date(2026, 4, 28, 12, 0, 0, 0, time.UTC))
|
||||
|
||||
report, ok := payload.Metadata["mesh_endpoint_report"].(map[string]any)
|
||||
@@ -754,6 +760,8 @@ func TestHeartbeatPayloadIncludesMeshEndpointReport(t *testing.T) {
|
||||
report["transport"] != "fabric_session_binary_frames" ||
|
||||
report["peer_sessions"] == nil {
|
||||
t.Fatalf("vpn fabric session report missing: %+v", payload.Metadata)
|
||||
} else if report["quic_sessions"] == nil || report["quic_max_streams_per_conn"] != 24 {
|
||||
t.Fatalf("vpn fabric quic session report missing: %+v", report)
|
||||
}
|
||||
if payload.Capabilities["vpn_fabric_endpoint_health_feedback"] != true {
|
||||
t.Fatalf("vpn fabric endpoint health capability missing: %+v", payload.Capabilities)
|
||||
|
||||
Reference in New Issue
Block a user