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<