| 418 | } |
| 419 | |
| 420 | func (r *DefaultMultiTenantManager) Stop() { |
| 421 | r.notifiersMtx.Lock() |
| 422 | for _, n := range r.notifiers { |
| 423 | n.stop() |
| 424 | } |
| 425 | r.notifiersMtx.Unlock() |
| 426 | |
| 427 | level.Info(r.logger).Log("msg", "stopping user managers") |
| 428 | wg := sync.WaitGroup{} |
| 429 | r.userManagerMtx.Lock() |
| 430 | for user, manager := range r.userManagers { |
| 431 | level.Debug(r.logger).Log("msg", "shutting down user manager", "user", user) |
| 432 | wg.Add(1) |
| 433 | go func(manager RulesManager, user string) { |
| 434 | manager.Stop() |
| 435 | wg.Done() |
| 436 | level.Debug(r.logger).Log("msg", "user manager shut down", "user", user) |
| 437 | }(manager, user) |
| 438 | } |
| 439 | wg.Wait() |
| 440 | r.userManagerMtx.Unlock() |
| 441 | level.Info(r.logger).Log("msg", "all user managers stopped") |
| 442 | |
| 443 | // cleanup user rules directories |
| 444 | r.mapper.cleanup() |
| 445 | r.userExternalLabels.cleanup() |
| 446 | } |
| 447 | |
| 448 | func (m *DefaultMultiTenantManager) ValidateRuleGroup(g rulefmt.RuleGroup) []error { |
| 449 | var errs []error |