Fix k8s service registration case where Vault fails to unlabel itself as a leader (#21642)

This commit is contained in:
Tom Proctor
2023-07-17 13:42:32 +01:00
committed by GitHub
parent e1a9d85a18
commit 5d97159f05
2 changed files with 11 additions and 12 deletions

3
changelog/21642.txt Normal file
View File

@@ -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
```

View File

@@ -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) {