From 79305da2216269ea46f1ffc4f194e9e511d10e63 Mon Sep 17 00:00:00 2001 From: tutman96 <11356668+tutman96@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:21:37 +0000 Subject: [PATCH] Fix net Listener interface and implement max process backoff time --- internal/plugin/install.go | 6 +++--- internal/plugin/process_manager.go | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/plugin/install.go b/internal/plugin/install.go index 3e61aae..b304976 100644 --- a/internal/plugin/install.go +++ b/internal/plugin/install.go @@ -22,7 +22,7 @@ type PluginInstall struct { manifest *PluginManifest runningVersion *string processManager *ProcessManager - rpcListener *net.Listener + rpcListener net.Listener } func (p *PluginInstall) GetManifest() (*PluginManifest, error) { @@ -115,7 +115,7 @@ func (p *PluginInstall) ReconcileSubprocess() error { if err != nil { return fmt.Errorf("failed to listen on socket: %v", err) } - p.rpcListener = &listener + p.rpcListener = listener p.processManager = NewProcessManager(func() *exec.Cmd { cmd := exec.Command(manifest.BinaryPath) @@ -148,7 +148,7 @@ func (p *PluginInstall) Shutdown() { } if p.rpcListener != nil { - (*p.rpcListener).Close() + p.rpcListener.Close() p.rpcListener = nil } } diff --git a/internal/plugin/process_manager.go b/internal/plugin/process_manager.go index 36e4a26..31bd53a 100644 --- a/internal/plugin/process_manager.go +++ b/internal/plugin/process_manager.go @@ -10,6 +10,7 @@ import ( // TODO: this can probably be defaulted to this, but overwritten on a per-plugin basis const GRACEFUL_SHUTDOWN_DELAY = 30 * time.Second +const MAX_RESTART_BACKOFF = 30 * time.Second type ProcessManager struct { cmdGen func() *exec.Cmd @@ -25,7 +26,7 @@ func NewProcessManager(commandGenerator func() *exec.Cmd) *ProcessManager { return &ProcessManager{ cmdGen: commandGenerator, enabled: true, - backoff: time.Second, + backoff: 250 * time.Millisecond, shutdown: make(chan struct{}), restartCh: make(chan struct{}, 1), } @@ -74,6 +75,9 @@ func (pm *ProcessManager) scheduleRestart() { log.Printf("Restarting process in %v...", pm.backoff) time.Sleep(pm.backoff) pm.backoff *= 2 // Exponential backoff + if pm.backoff > MAX_RESTART_BACKOFF { + pm.backoff = MAX_RESTART_BACKOFF + } pm.restartCh <- struct{}{} } }