From 40bb45d1928ee81a260977751903dcd2f5b00577 Mon Sep 17 00:00:00 2001 From: flying <54491871+flyingcoding@users.noreply.github.com> Date: Wed, 26 Aug 2026 23:33:45 +0800 Subject: [PATCH] vnet: fix route cleanup and reconnect backoff (#5492) --- pkg/plugin/visitor/virtual_net.go | 29 ++++++++++--- pkg/plugin/visitor/virtual_net_test.go | 47 +++++++++++++++++++++ pkg/vnet/controller.go | 13 ++++-- pkg/vnet/controller_test.go | 57 ++++++++++++++++++++++++++ 4 files changed, 137 insertions(+), 9 deletions(-) create mode 100644 pkg/plugin/visitor/virtual_net_test.go create mode 100644 pkg/vnet/controller_test.go diff --git a/pkg/plugin/visitor/virtual_net.go b/pkg/plugin/visitor/virtual_net.go index fa8c700e..87a67744 100644 --- a/pkg/plugin/visitor/virtual_net.go +++ b/pkg/plugin/visitor/virtual_net.go @@ -48,6 +48,11 @@ type VirtualNetPlugin struct { cancel context.CancelFunc } +const ( + virtualNetReconnectBaseDelay = 60 * time.Second + virtualNetReconnectMaxDelay = 300 * time.Second +) + func NewVirtualNetPlugin(pluginCtx PluginContext, options v1.VisitorPluginOptions) (Plugin, error) { opts := options.(*v1.VirtualNetVisitorPluginOptions) @@ -152,8 +157,7 @@ func (p *VirtualNetPlugin) run() { p.pluginCtx.Name, p.consecutiveErrors, closeErr) // Exponential backoff: 60s, 120s, 240s, 300s (capped) - baseDelay := 60 * time.Second - reconnectDelay = min(baseDelay*time.Duration(1< 0 { @@ -182,6 +186,18 @@ func (p *VirtualNetPlugin) run() { } } +// virtualNetReconnectDelay returns a bounded reconnect delay without allowing +// the exponential shift to overflow for large consecutive error counts. +func virtualNetReconnectDelay(consecutiveErrors int) time.Duration { + if consecutiveErrors <= 1 { + return virtualNetReconnectBaseDelay + } + if consecutiveErrors >= 4 { + return virtualNetReconnectMaxDelay + } + return virtualNetReconnectBaseDelay * time.Duration(1<