mirror of https://github.com/status-im/consul.git
Merge pull request #546 from ryanbreen/master
Add a randomized start before running CheckMonitors.
This commit is contained in:
commit
b74af612a9
|
@ -93,7 +93,10 @@ func (c *CheckMonitor) Stop() {
|
||||||
|
|
||||||
// run is invoked by a goroutine to run until Stop() is called
|
// run is invoked by a goroutine to run until Stop() is called
|
||||||
func (c *CheckMonitor) run() {
|
func (c *CheckMonitor) run() {
|
||||||
next := time.After(0)
|
// Get the randomized initial pause time
|
||||||
|
initialPauseTime := randomStagger(c.Interval)
|
||||||
|
c.Logger.Printf("[DEBUG] agent: pausing %v before first invocation of %s", initialPauseTime, c.Script)
|
||||||
|
next := time.After(initialPauseTime)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-next:
|
case <-next:
|
||||||
|
|
|
@ -65,6 +65,34 @@ func TestCheckMonitor_BadCmd(t *testing.T) {
|
||||||
expectStatus(t, "foobarbaz", structs.HealthCritical)
|
expectStatus(t, "foobarbaz", structs.HealthCritical)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCheckMonitor_RandomStagger(t *testing.T) {
|
||||||
|
mock := &MockNotify{
|
||||||
|
state: make(map[string]string),
|
||||||
|
updates: make(map[string]int),
|
||||||
|
output: make(map[string]string),
|
||||||
|
}
|
||||||
|
check := &CheckMonitor{
|
||||||
|
Notify: mock,
|
||||||
|
CheckID: "foo",
|
||||||
|
Script: "exit 0",
|
||||||
|
Interval: 25 * time.Millisecond,
|
||||||
|
Logger: log.New(os.Stderr, "", log.LstdFlags),
|
||||||
|
}
|
||||||
|
check.Start()
|
||||||
|
defer check.Stop()
|
||||||
|
|
||||||
|
time.Sleep(50 * time.Millisecond)
|
||||||
|
|
||||||
|
// Should have at least 1 update
|
||||||
|
if mock.updates["foo"] < 1 {
|
||||||
|
t.Fatalf("should have 1 or more updates %v", mock.updates)
|
||||||
|
}
|
||||||
|
|
||||||
|
if mock.state["foo"] != structs.HealthPassing {
|
||||||
|
t.Fatalf("should be %v %v", structs.HealthPassing, mock.state)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestCheckMonitor_LimitOutput(t *testing.T) {
|
func TestCheckMonitor_LimitOutput(t *testing.T) {
|
||||||
mock := &MockNotify{
|
mock := &MockNotify{
|
||||||
state: make(map[string]string),
|
state: make(map[string]string),
|
||||||
|
|
Loading…
Reference in New Issue