@@ -2,6 +2,7 @@ package schedulerd
22
33import (
44 "context"
5+ "sync"
56
67 corev2 "github.com/sensu/sensu-go/api/core/v2"
78 "github.com/sensu/sensu-go/backend/messaging"
@@ -23,6 +24,7 @@ type IntervalScheduler struct {
2324 interrupt chan * corev2.CheckConfig
2425 entityCache * cachev2.Resource
2526 secretsProviderManager * secrets.ProviderManager
27+ stopWg sync.WaitGroup
2628}
2729
2830// NewIntervalScheduler initializes an IntervalScheduler
@@ -64,10 +66,12 @@ func (s *IntervalScheduler) schedule(timer CheckTimer, executor *CheckExecutor)
6466// Start starts the IntervalScheduler.
6567func (s * IntervalScheduler ) Start () {
6668 intervalCounter .WithLabelValues (s .check .Namespace ).Inc ()
69+ s .stopWg .Add (1 )
6770 go s .start ()
6871}
6972
7073func (s * IntervalScheduler ) start () {
74+ defer s .stopWg .Done ()
7175 s .logger .Info ("starting new interval scheduler" )
7276 timer := NewIntervalTimer (s .check .Name , uint (s .check .Interval ))
7377 executor := NewCheckExecutor (s .bus , s .check .Namespace , s .store , s .entityCache , s .secretsProviderManager )
@@ -101,9 +105,11 @@ func (s *IntervalScheduler) Interrupt(check *corev2.CheckConfig) {
101105
102106// Stop stops the IntervalScheduler
103107func (s * IntervalScheduler ) Stop () error {
104- intervalCounter .WithLabelValues (s .check .Namespace ).Dec ()
105108 s .logger .Info ("stopping scheduler" )
106109 s .cancel ()
110+ s .stopWg .Wait ()
111+
112+ intervalCounter .WithLabelValues (s .check .Namespace ).Dec ()
107113
108114 return nil
109115}
0 commit comments