Browse Source

Fix premature rule evaluation

This commit prevents rule evaluation from starting until after
the storage is ready.
pull/1298/head
Fabian Reinartz 9 years ago
parent
commit
37d80c4b25
  1. 1
      cmd/prometheus/main.go
  2. 15
      rules/manager.go
  3. 2
      web/ui/bindata.go

1
cmd/prometheus/main.go

@ -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()

15
rules/manager.go

@ -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)
} }

2
web/ui/bindata.go

@ -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
} }

Loading…
Cancel
Save