From c113fd6b6f19d8e05236be8cb650f3d1439ad338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Fri, 15 Oct 2021 17:26:31 +0200 Subject: [PATCH] update maintenance check to passing before removing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without this update service using `consul watch` to monitor check changes will never see maintenance mode being disabled. Resolves: https://github.com/hashicorp/consul/issues/11330 Signed-off-by: Jakub SokoĊ‚owski --- .changelog/11332.txt | 3 +++ agent/agent.go | 8 ++++++++ 2 files changed, 11 insertions(+) create mode 100644 .changelog/11332.txt diff --git a/.changelog/11332.txt b/.changelog/11332.txt new file mode 100644 index 0000000000..b8c96368ee --- /dev/null +++ b/.changelog/11332.txt @@ -0,0 +1,3 @@ +```release-note:bug +agent: update maintenance check to passing before removing +``` diff --git a/agent/agent.go b/agent/agent.go index c5fb3cc886..19c43ab032 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -4109,6 +4109,10 @@ func (a *Agent) DisableServiceMaintenance(serviceID structs.ServiceID) error { return nil } + // Update check to trigger an event for watchers + a.State.UpdateCheck(checkID, api.HealthPassing, "") + // Make sure state change is propagated + a.State.SyncChanges() // Deregister the maintenance check a.RemoveCheck(checkID, true) a.logger.Info("Service left maintenance mode", "service", serviceID.String()) @@ -4146,6 +4150,10 @@ func (a *Agent) DisableNodeMaintenance() { if a.State.Check(structs.NodeMaintCheckID) == nil { return } + // Update check to trigger an event for watchers + a.State.UpdateCheck(structs.NodeMaintCheckID, api.HealthPassing, "") + // Make sure state change is propagated + a.State.SyncChanges() a.RemoveCheck(structs.NodeMaintCheckID, true) a.logger.Info("Node left maintenance mode") }