diff --git a/internal/reaper/database.go b/internal/reaper/database.go index 5bb60e591..05f544971 100644 --- a/internal/reaper/database.go +++ b/internal/reaper/database.go @@ -529,9 +529,12 @@ func TryCreateMetricsFetchingHelpers(ctx context.Context, md *sources.SourceConn func (r *Reaper) CloseResourcesForRemovedMonitoredDBs(shutDownDueToRoleChange map[string]bool) { for _, prevDB := range r.prevLoopMonitoredDBs { - if r.monitoredSources.GetMonitoredDatabase(prevDB.Name) == nil { // removed from config + md := r.monitoredSources.GetMonitoredDatabase(prevDB.Name) + if md == nil { // removed from config prevDB.Conn.Close() _ = r.SinksWriter.SyncMetric(prevDB.Name, "", sinks.DeleteOp) + } else if md.ConnStr != prevDB.ConnStr { + prevDB.Conn.Close() } } diff --git a/internal/reaper/reaper.go b/internal/reaper/reaper.go index d47abe139..1f875fac0 100644 --- a/internal/reaper/reaper.go +++ b/internal/reaper/reaper.go @@ -261,8 +261,20 @@ func (r *Reaper) ShutdownOldWorkers(ctx context.Context, hostsToShutDownDueToRol } else { currentMetricConfig = md.Metrics } + + var configChanged bool + if r.prevLoopMonitoredDBs != nil { + oldMd := r.prevLoopMonitoredDBs.GetMonitoredDatabase(db) + if oldMd != nil { + oldInterval, ok := oldMd.Metrics[metric] + configChanged = ok && + (oldInterval != currentMetricConfig[metric] && oldInterval > 0 || + oldMd.ConnStr != md.ConnStr) + } + } + interval, isMetricActive := currentMetricConfig[metric] - singleMetricDisabled = !isMetricActive || interval <= 0 + singleMetricDisabled = !isMetricActive || interval <= 0 || configChanged } if ctx.Err() != nil || wholeDbShutDownDueToRoleChange || dbRemovedFromConfig || singleMetricDisabled {