From d240da4393027b3bb1dd13e3d797ed22d36f0a02 Mon Sep 17 00:00:00 2001 From: yusing Date: Thu, 5 Jun 2025 18:40:40 +0800 Subject: [PATCH] fix(route): incorrect health status for idlewatcher dependencies --- internal/idlewatcher/watcher.go | 4 ++-- internal/route/route.go | 7 +++++++ internal/route/routes/route.go | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/idlewatcher/watcher.go b/internal/idlewatcher/watcher.go index 3d344a4..e1d9714 100644 --- a/internal/idlewatcher/watcher.go +++ b/internal/idlewatcher/watcher.go @@ -69,8 +69,6 @@ type ( const ContextKey = "idlewatcher.watcher" -// TODO: replace -1 with neverTick - var ( watcherMap = make(map[string]*Watcher) watcherMapMu sync.RWMutex @@ -315,6 +313,8 @@ func NewWatcher(parent task.Parent, r routes.Route, cfg *idlewatcher.Config) (*W w.dedupDependencies() + r.SetHealthMonitor(w) + w.l = w.l.With().Strs("deps", cfg.DependsOn).Logger() if exists { w.l.Debug().Msg("idlewatcher reloaded") diff --git a/internal/route/route.go b/internal/route/route.go index 54e0794..a8e4e96 100644 --- a/internal/route/route.go +++ b/internal/route/route.go @@ -366,6 +366,13 @@ func (r *Route) HealthMonitor() health.HealthMonitor { return r.HealthMon } +func (r *Route) SetHealthMonitor(m health.HealthMonitor) { + if r.HealthMon != nil && r.HealthMon != m { + r.HealthMon.Finish("health monitor replaced") + } + r.HealthMon = m +} + func (r *Route) IdlewatcherConfig() *idlewatcher.Config { return r.Idlewatcher } diff --git a/internal/route/routes/route.go b/internal/route/routes/route.go index a8a7d2c..877e325 100644 --- a/internal/route/routes/route.go +++ b/internal/route/routes/route.go @@ -26,6 +26,7 @@ type ( GetProvider() Provider TargetURL() *net.URL HealthMonitor() health.HealthMonitor + SetHealthMonitor(m health.HealthMonitor) References() []string Started() <-chan struct{}