Skip to content

Commit 108d07e

Browse files
authored
Merge pull request #4714 from sensu/update-changelog
Update changelog for 6.7.1 release
2 parents ffb0081 + 8b21ba5 commit 108d07e

File tree

6 files changed

+35
-9
lines changed

6 files changed

+35
-9
lines changed

CHANGELOG-6.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
2-
31
# Changelog
42
All notable changes to this project will be documented in this file.
53

@@ -9,6 +7,16 @@ Versioning](http://semver.org/spec/v2.0.0.html).
97

108
## Unreleased
119

10+
## [6.7.1] - 2022-04-28
11+
12+
### Changed
13+
- Cron scheduler now logs that it is stopping before it begins the process of
14+
stopping.
15+
16+
### Fixed
17+
- Fixed several data races in schedulerd.
18+
- Mitigate a data race in agentd sessions.
19+
1220
## [6.7.0] - 2022-04-21
1321

1422
### Added

backend/agentd/session.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,8 @@ func (s *Session) stop() {
577577
logger.WithError(err).Error("error closing session")
578578
}
579579
}()
580+
defer close(s.entityConfig.updatesChannel)
581+
defer close(s.checkChannel)
580582

581583
sessionCounter.WithLabelValues(s.cfg.Namespace).Dec()
582584

@@ -593,9 +595,6 @@ func (s *Session) stop() {
593595
sessionErrorCounter.WithLabelValues("GracePeriodExpired").Inc()
594596
}
595597

596-
close(s.entityConfig.updatesChannel)
597-
close(s.checkChannel)
598-
599598
// Remove the entity config subscriptions
600599
for sub := range s.entityConfig.subscriptions {
601600
if err := sub.Cancel(); err != nil {

backend/schedulerd/cron_scheduler.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package schedulerd
22

33
import (
44
"context"
5+
"sync"
56

67
"github.com/sensu/sensu-go/backend/messaging"
78
"github.com/sensu/sensu-go/backend/secrets"
@@ -24,6 +25,7 @@ type CronScheduler struct {
2425
interrupt chan *corev2.CheckConfig
2526
entityCache *cachev2.Resource
2627
secretsProviderManager *secrets.ProviderManager
28+
stopWg sync.WaitGroup
2729
}
2830

2931
// NewCronScheduler initializes a CronScheduler
@@ -65,10 +67,12 @@ func (s *CronScheduler) schedule(timer *CronTimer, executor *CheckExecutor) {
6567
// Start starts the cron scheduler.
6668
func (s *CronScheduler) Start() {
6769
cronCounter.WithLabelValues(s.check.Namespace).Inc()
70+
s.stopWg.Add(1)
6871
go s.start()
6972
}
7073

7174
func (s *CronScheduler) start() {
75+
defer s.stopWg.Done()
7276
s.logger.Info("starting new cron scheduler")
7377
timer := NewCronTimer(s.check.Name, s.check.Cron)
7478
executor := NewCheckExecutor(s.bus, s.check.Namespace, s.store, s.entityCache, s.secretsProviderManager)
@@ -101,9 +105,10 @@ func (s *CronScheduler) Interrupt(check *corev2.CheckConfig) {
101105

102106
// Stop stops the cron scheduler.
103107
func (s *CronScheduler) Stop() error {
104-
cronCounter.WithLabelValues(s.check.Namespace).Dec()
105108
logger.Info("stopping cron scheduler")
106109
s.cancel()
110+
s.stopWg.Wait()
111+
cronCounter.WithLabelValues(s.check.Namespace).Dec()
107112

108113
return nil
109114
}

backend/schedulerd/interval_scheduler.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package schedulerd
22

33
import (
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.
6567
func (s *IntervalScheduler) Start() {
6668
intervalCounter.WithLabelValues(s.check.Namespace).Inc()
69+
s.stopWg.Add(1)
6770
go s.start()
6871
}
6972

7073
func (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
103107
func (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
}

backend/schedulerd/roundrobin_cron.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ type RoundRobinCronScheduler struct {
3232
entityCache *cachev2.Resource
3333
mu sync.Mutex
3434
proxyEntities []*corev3.EntityConfig
35+
stopWg sync.WaitGroup
3536
}
3637

3738
// NewRoundRobinCronScheduler creates a new RoundRobinCronScheduler.
@@ -61,6 +62,7 @@ func NewRoundRobinCronScheduler(ctx context.Context, store store.Store, bus mess
6162
// Start starts the scheduler.
6263
func (s *RoundRobinCronScheduler) Start() {
6364
rrCronCounter.WithLabelValues(s.check.Namespace).Inc()
65+
s.stopWg.Add(1)
6466
go s.start()
6567
}
6668

@@ -97,6 +99,7 @@ func (s *RoundRobinCronScheduler) handleEvent(executor *CheckExecutor, event rin
9799
}
98100

99101
func (s *RoundRobinCronScheduler) start() {
102+
defer s.stopWg.Done()
100103
s.logger.Info("starting new round-robin cron scheduler")
101104
s.setLastState()
102105
s.updateRings()
@@ -220,9 +223,10 @@ func (s *RoundRobinCronScheduler) Interrupt(check *corev2.CheckConfig) {
220223

221224
// Stop stops the scheduler
222225
func (s *RoundRobinCronScheduler) Stop() error {
223-
rrCronCounter.WithLabelValues(s.check.Namespace).Dec()
224226
s.logger.Info("stopping scheduler")
225227
s.cancel()
228+
s.stopWg.Wait()
229+
rrCronCounter.WithLabelValues(s.check.Namespace).Dec()
226230
return nil
227231
}
228232

backend/schedulerd/roundrobin_interval.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ type RoundRobinIntervalScheduler struct {
4545
entityCache *cachev2.Resource
4646
mu sync.Mutex
4747
proxyEntities []*corev3.EntityConfig
48+
stopWg sync.WaitGroup
4849
}
4950

5051
// NewRoundRobinIntervalScheduler initializes a RoundRobinIntervalScheduler
@@ -123,6 +124,7 @@ func (s *RoundRobinIntervalScheduler) updateRings() {
123124
// Start starts the round robin interval scheduler.
124125
func (s *RoundRobinIntervalScheduler) Start() {
125126
rrIntervalCounter.WithLabelValues(s.check.Namespace).Inc()
127+
s.stopWg.Add(1)
126128
go s.start()
127129
}
128130

@@ -174,6 +176,7 @@ func (s *RoundRobinIntervalScheduler) handleEvent(executor *CheckExecutor, event
174176
}
175177

176178
func (s *RoundRobinIntervalScheduler) start() {
179+
defer s.stopWg.Done()
177180
s.logger.Info("starting new round-robin interval scheduler")
178181
s.setLastState()
179182
s.updateRings()
@@ -245,9 +248,10 @@ func (s *RoundRobinIntervalScheduler) Interrupt(check *corev2.CheckConfig) {
245248

246249
// Stop stops the scheduler
247250
func (s *RoundRobinIntervalScheduler) Stop() error {
248-
rrIntervalCounter.WithLabelValues(s.check.Namespace).Dec()
249251
s.logger.Info("stopping scheduler")
250252
s.cancel()
253+
s.stopWg.Wait()
254+
rrIntervalCounter.WithLabelValues(s.check.Namespace).Dec()
251255
return nil
252256
}
253257

0 commit comments

Comments
 (0)