Skip to content

Commit dea78ec

Browse files
committed
Address review comments
Signed-off-by: gotjosh <josue@grafana.com>
1 parent 0d10488 commit dea78ec

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

pkg/alertmanager/alertmanager.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,10 @@ func (am *Alertmanager) Stop() {
279279

280280
am.alerts.Close()
281281
close(am.stop)
282+
}
283+
284+
func (am *Alertmanager) StopAndWait() {
285+
am.Stop()
282286
am.wg.Wait()
283287
}
284288

pkg/alertmanager/alertmanager_metrics_test.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,12 @@ func TestAlertmanagerMetricsRemoval(t *testing.T) {
267267
alertmanagerMetrics.addUserRegistry("user2", populateAlertmanager(10))
268268
alertmanagerMetrics.addUserRegistry("user3", populateAlertmanager(100))
269269

270-
// Assertion before removal.
270+
// In this test, we assert that metrics are "soft deleted" per the registry removal.
271+
// In practice, this means several things:
272+
// a) counters of removed registries are not reset.
273+
// b) gauges of removed registries are removed.
274+
// c) histograms/summaries (as these are just counters) are not reset.
275+
// Instead of just asserting a few of these metrics we go for the whole payload to ensure our tests are sensitive to change and avoid regressions.
271276
err := testutil.GatherAndCompare(mainReg, bytes.NewBufferString(`
272277
# HELP cortex_alertmanager_alerts How many alerts by state.
273278
# TYPE cortex_alertmanager_alerts gauge

pkg/alertmanager/multitenant.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ func (am *MultitenantAlertmanager) loadAndSyncConfigs(ctx context.Context, syncR
522522
func (am *MultitenantAlertmanager) stopping(_ error) error {
523523
am.alertmanagersMtx.Lock()
524524
for _, am := range am.alertmanagers {
525-
am.Stop()
525+
am.StopAndWait()
526526
}
527527
am.alertmanagersMtx.Unlock()
528528
if am.peer != nil { // Tests don't setup any peer.
@@ -607,7 +607,7 @@ func (am *MultitenantAlertmanager) syncConfigs(cfgs map[string]alerts.AlertConfi
607607
for userID, userAM := range am.alertmanagers {
608608
if _, exists := cfgs[userID]; !exists {
609609
level.Info(am.logger).Log("msg", "deactivating per-tenant alertmanager", "user", userID)
610-
go userAM.Stop()
610+
userAM.Stop()
611611
delete(am.alertmanagers, userID)
612612
delete(am.cfgs, userID)
613613
am.multitenantMetrics.lastReloadSuccessful.DeleteLabelValues(userID)
@@ -621,9 +621,6 @@ func (am *MultitenantAlertmanager) syncConfigs(cfgs map[string]alerts.AlertConfi
621621
// setConfig applies the given configuration to the alertmanager for `userID`,
622622
// creating an alertmanager if it doesn't already exist.
623623
func (am *MultitenantAlertmanager) setConfig(cfg alerts.AlertConfigDesc) error {
624-
am.alertmanagersMtx.Lock()
625-
existing, hasExisting := am.alertmanagers[cfg.User]
626-
am.alertmanagersMtx.Unlock()
627624
var userAmConfig *amconfig.Config
628625
var err error
629626
var hasTemplateChanges bool
@@ -641,6 +638,10 @@ func (am *MultitenantAlertmanager) setConfig(cfg alerts.AlertConfigDesc) error {
641638

642639
level.Debug(am.logger).Log("msg", "setting config", "user", cfg.User)
643640

641+
am.alertmanagersMtx.Lock()
642+
defer am.alertmanagersMtx.Unlock()
643+
existing, hasExisting := am.alertmanagers[cfg.User]
644+
644645
rawCfg := cfg.RawConfig
645646
if cfg.RawConfig == "" {
646647
if am.fallbackConfig == "" {
@@ -693,9 +694,7 @@ func (am *MultitenantAlertmanager) setConfig(cfg alerts.AlertConfigDesc) error {
693694
if err != nil {
694695
return err
695696
}
696-
am.alertmanagersMtx.Lock()
697697
am.alertmanagers[cfg.User] = newAM
698-
am.alertmanagersMtx.Unlock()
699698
} else if am.cfgs[cfg.User].RawConfig != cfg.RawConfig || hasTemplateChanges {
700699
level.Info(am.logger).Log("msg", "updating new per-tenant alertmanager", "user", cfg.User)
701700
// If the config changed, apply the new one.

0 commit comments

Comments
 (0)