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)
|
||||
}
|
||||
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)
|
||||
return nil
|
||||
|
@ -942,6 +947,16 @@ func (a *Agent) recallCheckState(check *structs.HealthCheck) error {
|
|||
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
|
||||
func (a *Agent) Stats() map[string]map[string]string {
|
||||
toString := func(v uint64) string {
|
||||
|
|
|
@ -1453,3 +1453,36 @@ func TestAgent_recallCheckState(t *testing.T) {
|
|||
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