agent: purge check state when checks are deregistered
This commit is contained in:
parent
8c9facbff0
commit
7d8993e0f0
|
@ -851,7 +851,12 @@ func (a *Agent) RemoveCheck(checkID string, persist bool) error {
|
||||||
delete(a.checkTTLs, checkID)
|
delete(a.checkTTLs, checkID)
|
||||||
}
|
}
|
||||||
if persist {
|
if persist {
|
||||||
return a.purgeCheck(checkID)
|
if err := a.purgeCheck(checkID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := a.purgeCheckState(checkID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
log.Printf("[DEBUG] agent: removed check %q", checkID)
|
log.Printf("[DEBUG] agent: removed check %q", checkID)
|
||||||
return nil
|
return nil
|
||||||
|
@ -942,6 +947,16 @@ func (a *Agent) recallCheckState(check *structs.HealthCheck) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// purgeCheckState is used to purge the state of a check from the data dir
|
||||||
|
func (a *Agent) purgeCheckState(checkID string) error {
|
||||||
|
file := filepath.Join(a.config.DataDir, checkStateDir, stringHash(checkID))
|
||||||
|
err := os.Remove(file)
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Stats is used to get various debugging state from the sub-systems
|
// Stats is used to get various debugging state from the sub-systems
|
||||||
func (a *Agent) Stats() map[string]map[string]string {
|
func (a *Agent) Stats() map[string]map[string]string {
|
||||||
toString := func(v uint64) string {
|
toString := func(v uint64) string {
|
||||||
|
|
|
@ -1453,3 +1453,36 @@ func TestAgent_recallCheckState(t *testing.T) {
|
||||||
t.Fatalf("bad: %#v", health)
|
t.Fatalf("bad: %#v", health)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAgent_purgeCheckState(t *testing.T) {
|
||||||
|
config := nextConfig()
|
||||||
|
dir, agent := makeAgent(t, config)
|
||||||
|
defer os.RemoveAll(dir)
|
||||||
|
defer agent.Shutdown()
|
||||||
|
|
||||||
|
// No error if the state does not exist
|
||||||
|
if err := agent.purgeCheckState("check1"); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Persist some state to the data dir
|
||||||
|
check := &CheckTTL{
|
||||||
|
CheckID: "check1",
|
||||||
|
TTL: time.Minute,
|
||||||
|
}
|
||||||
|
err := agent.persistCheckState(check, structs.HealthPassing, "yup")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Purge the check state
|
||||||
|
if err := agent.purgeCheckState("check1"); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Removed the file
|
||||||
|
file := filepath.Join(agent.config.DataDir, checkStateDir, stringHash("check1"))
|
||||||
|
if _, err := os.Stat(file); !os.IsNotExist(err) {
|
||||||
|
t.Fatalf("should have removed file")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue