mirror of
https://github.com/status-im/consul.git
synced 2025-01-11 06:16:08 +00:00
agent: do not deregister service checks twice (#6168)
Deregistering a service from the catalog automatically deregisters its checks, however the agent still performs a deregister call for each service checks even after the service has been deregistered. With ACLs enabled this results in logs like: "message:consul: "Catalog.Deregister" RPC failed to server server_ip:8300: rpc error making call: rpc error making call: Unknown check 'check_id'" This change removes associated checks from the agent state when deregistering a service, which results in less calls to the servers and supresses the error logs.
This commit is contained in:
parent
ce023359fe
commit
5dc8875bd3
@ -1091,6 +1091,12 @@ func (l *State) deleteService(key structs.ServiceID) error {
|
|||||||
switch {
|
switch {
|
||||||
case err == nil || strings.Contains(err.Error(), "Unknown service"):
|
case err == nil || strings.Contains(err.Error(), "Unknown service"):
|
||||||
delete(l.services, key)
|
delete(l.services, key)
|
||||||
|
// service deregister also deletes associated checks
|
||||||
|
for _, c := range l.checks {
|
||||||
|
if c.Deleted && c.Check.ServiceID == key.ID {
|
||||||
|
l.pruneCheck(c.Check.CompoundCheckID())
|
||||||
|
}
|
||||||
|
}
|
||||||
l.logger.Printf("[INFO] agent: Deregistered service %q", key.ID)
|
l.logger.Printf("[INFO] agent: Deregistered service %q", key.ID)
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
@ -1125,11 +1131,7 @@ func (l *State) deleteCheck(key structs.CheckID) error {
|
|||||||
err := l.Delegate.RPC("Catalog.Deregister", &req, &out)
|
err := l.Delegate.RPC("Catalog.Deregister", &req, &out)
|
||||||
switch {
|
switch {
|
||||||
case err == nil || strings.Contains(err.Error(), "Unknown check"):
|
case err == nil || strings.Contains(err.Error(), "Unknown check"):
|
||||||
c := l.checks[key]
|
l.pruneCheck(key)
|
||||||
if c != nil && c.DeferCheck != nil {
|
|
||||||
c.DeferCheck.Stop()
|
|
||||||
}
|
|
||||||
delete(l.checks, key)
|
|
||||||
l.logger.Printf("[INFO] agent: Deregistered check %q", key.String())
|
l.logger.Printf("[INFO] agent: Deregistered check %q", key.String())
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
@ -1147,6 +1149,14 @@ func (l *State) deleteCheck(key structs.CheckID) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l *State) pruneCheck(id structs.CheckID) {
|
||||||
|
c := l.checks[id]
|
||||||
|
if c != nil && c.DeferCheck != nil {
|
||||||
|
c.DeferCheck.Stop()
|
||||||
|
}
|
||||||
|
delete(l.checks, id)
|
||||||
|
}
|
||||||
|
|
||||||
// syncService is used to sync a service to the server
|
// syncService is used to sync a service to the server
|
||||||
func (l *State) syncService(key structs.ServiceID) error {
|
func (l *State) syncService(key structs.ServiceID) error {
|
||||||
// If the service has associated checks that are out of sync,
|
// If the service has associated checks that are out of sync,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user