mirror of
https://github.com/prometheus/prometheus
synced 2024-12-26 16:43:21 +00:00
Merge pull request #14366 from rapphil/rapphil-fix-panic-ruler
Make rules Manager Update method no-op after Close
This commit is contained in:
commit
4f2558de42
@ -190,10 +190,18 @@ func (m *Manager) Stop() {
|
||||
|
||||
// Update the rule manager's state as the config requires. If
|
||||
// loading the new rules failed the old rule set is restored.
|
||||
// This method will no-op in case the manager is already stopped.
|
||||
func (m *Manager) Update(interval time.Duration, files []string, externalLabels labels.Labels, externalURL string, groupEvalIterationFunc GroupEvalIterationFunc) error {
|
||||
m.mtx.Lock()
|
||||
defer m.mtx.Unlock()
|
||||
|
||||
// We cannot update a stopped manager
|
||||
select {
|
||||
case <-m.done:
|
||||
return nil
|
||||
default:
|
||||
}
|
||||
|
||||
groups, errs := m.LoadGroups(interval, externalLabels, externalURL, groupEvalIterationFunc, files...)
|
||||
|
||||
if errs != nil {
|
||||
|
@ -2099,6 +2099,23 @@ func TestBoundedRuleEvalConcurrency(t *testing.T) {
|
||||
require.EqualValues(t, maxInflight.Load(), int32(maxConcurrency)+int32(groupCount))
|
||||
}
|
||||
|
||||
func TestUpdateWhenStopped(t *testing.T) {
|
||||
files := []string{"fixtures/rules.yaml"}
|
||||
ruleManager := NewManager(&ManagerOptions{
|
||||
Context: context.Background(),
|
||||
Logger: log.NewNopLogger(),
|
||||
})
|
||||
ruleManager.start()
|
||||
err := ruleManager.Update(10*time.Second, files, labels.EmptyLabels(), "", nil)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, ruleManager.groups)
|
||||
|
||||
ruleManager.Stop()
|
||||
// Updates following a stop are no-op.
|
||||
err = ruleManager.Update(10*time.Second, []string{}, labels.EmptyLabels(), "", nil)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
const artificialDelay = 250 * time.Millisecond
|
||||
|
||||
func optsFactory(storage storage.Storage, maxInflight, inflightQueries *atomic.Int32, maxConcurrent int64) *ManagerOptions {
|
||||
|
Loading…
Reference in New Issue
Block a user