@@ -522,7 +522,7 @@ func (am *MultitenantAlertmanager) loadAndSyncConfigs(ctx context.Context, syncR
522
522
func (am * MultitenantAlertmanager ) stopping (_ error ) error {
523
523
am .alertmanagersMtx .Lock ()
524
524
for _ , am := range am .alertmanagers {
525
- am .Stop ()
525
+ am .StopAndWait ()
526
526
}
527
527
am .alertmanagersMtx .Unlock ()
528
528
if am .peer != nil { // Tests don't setup any peer.
@@ -607,7 +607,7 @@ func (am *MultitenantAlertmanager) syncConfigs(cfgs map[string]alerts.AlertConfi
607
607
for userID , userAM := range am .alertmanagers {
608
608
if _ , exists := cfgs [userID ]; ! exists {
609
609
level .Info (am .logger ).Log ("msg" , "deactivating per-tenant alertmanager" , "user" , userID )
610
- go userAM .Stop ()
610
+ userAM .Stop ()
611
611
delete (am .alertmanagers , userID )
612
612
delete (am .cfgs , userID )
613
613
am .multitenantMetrics .lastReloadSuccessful .DeleteLabelValues (userID )
@@ -621,9 +621,6 @@ func (am *MultitenantAlertmanager) syncConfigs(cfgs map[string]alerts.AlertConfi
621
621
// setConfig applies the given configuration to the alertmanager for `userID`,
622
622
// creating an alertmanager if it doesn't already exist.
623
623
func (am * MultitenantAlertmanager ) setConfig (cfg alerts.AlertConfigDesc ) error {
624
- am .alertmanagersMtx .Lock ()
625
- existing , hasExisting := am .alertmanagers [cfg .User ]
626
- am .alertmanagersMtx .Unlock ()
627
624
var userAmConfig * amconfig.Config
628
625
var err error
629
626
var hasTemplateChanges bool
@@ -641,6 +638,10 @@ func (am *MultitenantAlertmanager) setConfig(cfg alerts.AlertConfigDesc) error {
641
638
642
639
level .Debug (am .logger ).Log ("msg" , "setting config" , "user" , cfg .User )
643
640
641
+ am .alertmanagersMtx .Lock ()
642
+ defer am .alertmanagersMtx .Unlock ()
643
+ existing , hasExisting := am .alertmanagers [cfg .User ]
644
+
644
645
rawCfg := cfg .RawConfig
645
646
if cfg .RawConfig == "" {
646
647
if am .fallbackConfig == "" {
@@ -693,9 +694,7 @@ func (am *MultitenantAlertmanager) setConfig(cfg alerts.AlertConfigDesc) error {
693
694
if err != nil {
694
695
return err
695
696
}
696
- am .alertmanagersMtx .Lock ()
697
697
am .alertmanagers [cfg .User ] = newAM
698
- am .alertmanagersMtx .Unlock ()
699
698
} else if am .cfgs [cfg .User ].RawConfig != cfg .RawConfig || hasTemplateChanges {
700
699
level .Info (am .logger ).Log ("msg" , "updating new per-tenant alertmanager" , "user" , cfg .User )
701
700
// If the config changed, apply the new one.
0 commit comments