diff --git a/pruner/metrics.go b/pruner/metrics.go index b43adda3fd..c43217dc3d 100644 --- a/pruner/metrics.go +++ b/pruner/metrics.go @@ -17,6 +17,8 @@ type metrics struct { lastPruned metric.Int64ObservableGauge failedPrunes metric.Int64ObservableGauge + + clientReg metric.Registration } func (s *Service) WithMetrics() error { @@ -44,7 +46,8 @@ func (s *Service) WithMetrics() error { return nil } - if _, err := meter.RegisterCallback(callback, lastPruned, failedPrunes); err != nil { + clientReg, err := meter.RegisterCallback(callback, lastPruned, failedPrunes) + if err != nil { return err } @@ -52,10 +55,19 @@ func (s *Service) WithMetrics() error { prunedCounter: prunedCounter, lastPruned: lastPruned, failedPrunes: failedPrunes, + clientReg: clientReg, } return nil } +func (m *metrics) close() error { + if m == nil { + return nil + } + + return m.clientReg.Unregister() +} + func (m *metrics) observePrune(ctx context.Context, failed bool) { if m == nil { return diff --git a/pruner/service.go b/pruner/service.go index 26e4cb286b..65935e75d8 100644 --- a/pruner/service.go +++ b/pruner/service.go @@ -84,6 +84,8 @@ func (s *Service) Start(context.Context) error { func (s *Service) Stop(ctx context.Context) error { s.cancel() + s.metrics.close() + select { case <-s.doneCh: return nil