Reuse QUIC fabric connections
This commit is contained in:
@@ -366,6 +366,7 @@ type syntheticMeshState struct {
|
||||
VPNFabricIngress *vpnruntime.FabricClientPacketIngress
|
||||
VPNFabricSessionPeers *mesh.FabricSessionPeerManager
|
||||
VPNFabricTransport *mesh.WebSocketFabricTransport
|
||||
VPNFabricQUICTransport *mesh.QUICFabricTransport
|
||||
VPNFabricSessionDialStats *vpnFabricSessionDialStats
|
||||
VPNFabricEndpointObservations *vpnFabricEndpointObservationStore
|
||||
PeerEndpoints map[string]string
|
||||
@@ -1094,6 +1095,7 @@ func startSyntheticMeshEndpoint(ctx context.Context, _ context.CancelFunc, cfg c
|
||||
VPNFabricIngress: vpnFabricIngress,
|
||||
VPNFabricSessionPeers: vpnFabricSessionPeers,
|
||||
VPNFabricTransport: mesh.NewWebSocketFabricTransport(vpnFabricSessionPeers),
|
||||
VPNFabricQUICTransport: mesh.NewQUICFabricTransport(nil),
|
||||
VPNFabricSessionDialStats: newVPNFabricSessionDialStats(),
|
||||
VPNFabricEndpointObservations: newVPNFabricEndpointObservationStore(identity.NodeID),
|
||||
PeerEndpoints: copyStringMap(peerEndpoints),
|
||||
@@ -1984,8 +1986,12 @@ func applyRefreshedSyntheticMeshConfig(ctx context.Context, cfg config.Config, i
|
||||
meshState.ProductionForwardingEnabled = productionForwardingEnabled
|
||||
if (!sameStringMap(meshState.PeerEndpoints, loadedConfig.PeerEndpoints) || !samePeerEndpointCandidatesMap(meshState.PeerEndpointCandidates, loadedConfig.PeerEndpointCandidates)) && meshState.VPNFabricSessionPeers != nil {
|
||||
_ = meshState.VPNFabricSessionPeers.Close()
|
||||
if meshState.VPNFabricQUICTransport != nil {
|
||||
_ = meshState.VPNFabricQUICTransport.Close()
|
||||
}
|
||||
meshState.VPNFabricSessionPeers = mesh.NewFabricSessionPeerManager()
|
||||
meshState.VPNFabricTransport = mesh.NewWebSocketFabricTransport(meshState.VPNFabricSessionPeers)
|
||||
meshState.VPNFabricQUICTransport = mesh.NewQUICFabricTransport(nil)
|
||||
}
|
||||
if meshState.VPNFabricSessionPeers == nil {
|
||||
meshState.VPNFabricSessionPeers = mesh.NewFabricSessionPeerManager()
|
||||
@@ -1993,6 +1999,9 @@ func applyRefreshedSyntheticMeshConfig(ctx context.Context, cfg config.Config, i
|
||||
if meshState.VPNFabricTransport == nil {
|
||||
meshState.VPNFabricTransport = mesh.NewWebSocketFabricTransport(meshState.VPNFabricSessionPeers)
|
||||
}
|
||||
if meshState.VPNFabricQUICTransport == nil {
|
||||
meshState.VPNFabricQUICTransport = mesh.NewQUICFabricTransport(nil)
|
||||
}
|
||||
if meshState.VPNFabricSessionDialStats == nil {
|
||||
meshState.VPNFabricSessionDialStats = newVPNFabricSessionDialStats()
|
||||
}
|
||||
@@ -2955,6 +2964,9 @@ func heartbeatPayload(cfg config.Config, identity state.Identity, meshState *syn
|
||||
} else if meshState != nil && meshState.VPNFabricSessionPeers != nil {
|
||||
report["peer_sessions"] = meshState.VPNFabricSessionPeers.Snapshot()
|
||||
}
|
||||
if meshState != nil && meshState.VPNFabricQUICTransport != nil {
|
||||
report["quic_sessions"] = meshState.VPNFabricQUICTransport.Snapshot()
|
||||
}
|
||||
if meshState != nil && meshState.VPNFabricSessionDialStats != nil {
|
||||
report["dial_stats"] = meshState.VPNFabricSessionDialStats.Report(observedAt)
|
||||
}
|
||||
@@ -4989,7 +5001,7 @@ func fabricSessionGatewayTransportForAssignment(ctx context.Context, identity st
|
||||
target.OutboundBuffer = 256
|
||||
target.InboundBuffer = 256
|
||||
target.ErrorBuffer = 16
|
||||
carrier, selectedTarget, err := mesh.FabricTransportForTarget(target, meshState.VPNFabricTransport, nil)
|
||||
carrier, selectedTarget, err := mesh.FabricTransportForTarget(target, meshState.VPNFabricTransport, meshState.VPNFabricQUICTransport)
|
||||
if err != nil {
|
||||
cancel()
|
||||
meshState.VPNFabricSessionDialStats.ObserveCandidateFailure("transport_select_failed")
|
||||
|
||||
Reference in New Issue
Block a user