mirror of https://github.com/status-im/consul.git
consul/state: add check deletion method
This commit is contained in:
parent
6ebed234bb
commit
b0132b140c
|
@ -433,3 +433,39 @@ func (s *StateStore) parseChecks(iter memdb.ResultIterator, err error) (structs.
|
||||||
}
|
}
|
||||||
return results, nil
|
return results, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteCheck is used to delete a health check registration.
|
||||||
|
func (s *StateStore) DeleteCheck(idx uint64, node, id string) error {
|
||||||
|
tx := s.db.Txn(true)
|
||||||
|
defer tx.Abort()
|
||||||
|
|
||||||
|
// Call the check deletion
|
||||||
|
if err := s.deleteCheckTxn(idx, node, id, tx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
tx.Commit()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// deleteCheckTxn is the inner method used to call a health
|
||||||
|
// check deletion within an existing transaction.
|
||||||
|
func (s *StateStore) deleteCheckTxn(idx uint64, node, id string, tx *memdb.Txn) error {
|
||||||
|
// Try to retrieve the existing health check
|
||||||
|
check, err := tx.First("checks", "id", node, id)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("check lookup failed: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete the check from the DB and update the index
|
||||||
|
if err := tx.Delete("checks", check); err != nil {
|
||||||
|
return fmt.Errorf("failed removing check: %s", err)
|
||||||
|
}
|
||||||
|
if err := tx.Insert("index", &IndexEntry{"checks", idx}); err != nil {
|
||||||
|
return fmt.Errorf("failed updating index: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: invalidate sessions
|
||||||
|
// TODO: watch triggers
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -359,3 +359,55 @@ func TestStateStore_EnsureCheck(t *testing.T) {
|
||||||
t.Fatalf("bad index: %#v", checks[0])
|
t.Fatalf("bad index: %#v", checks[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStateStore_DeleteCheck(t *testing.T) {
|
||||||
|
s := testStateStore(t)
|
||||||
|
|
||||||
|
// Create and register a node
|
||||||
|
node := &structs.Node{
|
||||||
|
Node: "node1",
|
||||||
|
Address: "1.1.1.1",
|
||||||
|
}
|
||||||
|
if err := s.EnsureNode(1, node); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the health check struct
|
||||||
|
check := &structs.HealthCheck{
|
||||||
|
Node: "node1",
|
||||||
|
CheckID: "check1",
|
||||||
|
Name: "node1 check",
|
||||||
|
Status: structs.HealthPassing,
|
||||||
|
Notes: "test check",
|
||||||
|
Output: "aaa",
|
||||||
|
}
|
||||||
|
if err := s.EnsureCheck(2, check); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check exists
|
||||||
|
checks, err := s.NodeChecks("node1")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if len(checks) != 1 || checks[0].CheckID != "check1" {
|
||||||
|
t.Fatalf("bad: %#v", checks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete the check
|
||||||
|
if err := s.DeleteCheck(3, "node1", "check1"); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check is gone
|
||||||
|
checks, err = s.NodeChecks("node1")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if len(checks) != 0 {
|
||||||
|
t.Fatalf("bad: %#v", checks)
|
||||||
|
}
|
||||||
|
if n := s.maxIndex("checks"); n != 3 {
|
||||||
|
t.Fatalf("bad index: %d", n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue