Merge pull request #1298 from prometheus/rulemgrfix

Fix premature rule evaluation
This commit is contained in:
Fabian Reinartz 2016-01-08 18:32:16 +01:00
commit c44594185f
3 changed files with 16 additions and 2 deletions

View file

@ -155,6 +155,7 @@ func Main() int {
prometheus.MustRegister(configSuccess) prometheus.MustRegister(configSuccess)
prometheus.MustRegister(configSuccessTime) prometheus.MustRegister(configSuccessTime)
go ruleManager.Run()
defer ruleManager.Stop() defer ruleManager.Stop()
go notificationHandler.Run() go notificationHandler.Run()

View file

@ -325,6 +325,7 @@ type Manager struct {
opts *ManagerOptions opts *ManagerOptions
groups map[string]*Group groups map[string]*Group
mtx sync.RWMutex mtx sync.RWMutex
block chan struct{}
} }
// ManagerOptions bundles options for the Manager. // ManagerOptions bundles options for the Manager.
@ -341,10 +342,16 @@ func NewManager(o *ManagerOptions) *Manager {
manager := &Manager{ manager := &Manager{
groups: map[string]*Group{}, groups: map[string]*Group{},
opts: o, opts: o,
block: make(chan struct{}),
} }
return manager return manager
} }
// Run starts processing of the rule manager.
func (m *Manager) Run() {
close(m.block)
}
// Stop the rule manager's rule evaluation cycles. // Stop the rule manager's rule evaluation cycles.
func (m *Manager) Stop() { func (m *Manager) Stop() {
log.Info("Stopping rule manager...") log.Info("Stopping rule manager...")
@ -398,7 +405,13 @@ func (m *Manager) ApplyConfig(conf *config.Config) bool {
oldg.stop() oldg.stop()
newg.copyState(oldg) newg.copyState(oldg)
} }
go newg.run() go func() {
// Wait with starting evaluation until the rule manager
// is told to run. This is necessary to avoid running
// queries against a bootstrapping storage.
<-m.block
newg.run()
}()
wg.Done() wg.Done()
}(newg) }(newg)
} }

View file

@ -134,7 +134,7 @@ func webUiTemplatesAlertsHtml() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "web/ui/templates/alerts.html", size: 1704, mode: os.FileMode(420), modTime: time.Unix(1450348695, 0)} info := bindataFileInfo{name: "web/ui/templates/alerts.html", size: 1704, mode: os.FileMode(420), modTime: time.Unix(1450878652, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }