diff --git a/changelog/21642.txt b/changelog/21642.txt new file mode 100644 index 000000000..84af5b694 --- /dev/null +++ b/changelog/21642.txt @@ -0,0 +1,3 @@ +```release-note:bug +serviceregistration: Fix bug where multiple nodes in a secondary cluster could be labelled active after updating the cluster's primary +``` \ No newline at end of file diff --git a/vault/ha.go b/vault/ha.go index 816ce2309..342849fcd 100644 --- a/vault/ha.go +++ b/vault/ha.go @@ -710,6 +710,13 @@ func (c *Core) waitForLeadership(newLeaderCh chan func(), manualStepDownCh, stop c.heldHALock = nil } + // Advertise ourselves as a standby. + if c.serviceRegistration != nil { + if err := c.serviceRegistration.NotifyActiveStateChange(false); err != nil { + c.logger.Warn("failed to notify standby status", "error", err) + } + } + // If we are stopped return, otherwise unlock the statelock if stopped { return @@ -1133,18 +1140,7 @@ func (c *Core) cleanLeaderPrefix(ctx context.Context, uuid string, leaderLostCh // clearLeader is used to clear our leadership entry func (c *Core) clearLeader(uuid string) error { key := coreLeaderPrefix + uuid - err := c.barrier.Delete(context.Background(), key) - - // Advertise ourselves as a standby - if c.serviceRegistration != nil { - if err := c.serviceRegistration.NotifyActiveStateChange(false); err != nil { - if c.logger.IsWarn() { - c.logger.Warn("failed to notify standby status", "error", err) - } - } - } - - return err + return c.barrier.Delete(context.Background(), key) } func (c *Core) SetNeverBecomeActive(on bool) {