Skip to content

Commit

Permalink
keyring: filter by region before checking version
Browse files Browse the repository at this point in the history
In #14821 we fixed a panic that can happen if a leadership election happens in
the middle of an upgrade. That fix checks that all servers are at the minimum
version before initializing the keyring (which blocks evaluation processing
during trhe upgrade). But the check we implemented is over the serf membership,
which includes servers in any federated regions, which don't necessarily have
the same upgrade cycle.

Filter the version check by the leader's region.
  • Loading branch information
tgross committed Oct 17, 2022
1 parent 9cdbbbb commit 449debd
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .changelog/14901.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
keyring: Fixed a bug where keyring initialization is blocked by un-upgraded federated regions
```
10 changes: 9 additions & 1 deletion nomad/leader.go
Original file line number Diff line number Diff line change
Expand Up @@ -1990,7 +1990,15 @@ func (s *Server) initializeKeyring(stopCh <-chan struct{}) {
return
default:
}
if ServersMeetMinimumVersion(s.serf.Members(), minVersionKeyring, true) {

members := s.serf.Members()
regionMembers := []serf.Member{}
for _, member := range members {
if member.Tags["region"] == s.Region() {
regionMembers = append(regionMembers, member)
}
}
if ServersMeetMinimumVersion(regionMembers, minVersionKeyring, true) {
break
}
}
Expand Down

0 comments on commit 449debd

Please sign in to comment.