Skip to content

Commit

Permalink
nnsd: gate registration write & delete RPC use on v1.3.0 or greater. (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
jrasell committed Oct 18, 2022
1 parent 2f234e3 commit 829584e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .changelog/14924.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
```release-note:bug
nomad native service discovery: Ensure all local servers meet v.1.3.0 minimum before service registrations can be written
```

5 changes: 5 additions & 0 deletions nomad/leader.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ var minJobRegisterAtomicEvalVersion = version.Must(version.NewVersion("0.12.1"))

var minOneTimeAuthenticationTokenVersion = version.Must(version.NewVersion("1.1.0"))

// minNomadServiceRegistrationVersion is the Nomad version at which the service
// registrations table was introduced. It forms the minimum version all local
// servers must meet before the feature can be used.
var minNomadServiceRegistrationVersion = version.Must(version.NewVersion("1.3.0"))

// monitorLeadership is used to monitor if we acquire or lose our role
// as the leader in the Raft cluster. There is some work the leader is
// expected to do, so we must react to changes
Expand Down
15 changes: 15 additions & 0 deletions nomad/service_registration_endpoint.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package nomad

import (
"fmt"
"net/http"
"sort"
"strconv"
Expand Down Expand Up @@ -45,6 +46,13 @@ func (s *ServiceRegistration) Upsert(
}
defer metrics.MeasureSince([]string{"nomad", "service_registration", "upsert"}, time.Now())

// Nomad service registrations can only be used once all servers, in the
// local region, have been upgraded to 1.3.0 or greater.
if !ServersMeetMinimumVersion(s.srv.Members(), s.srv.Region(), minNomadServiceRegistrationVersion, false) {
return fmt.Errorf("all servers should be running version %v or later to use the Nomad service provider",
minNomadServiceRegistrationVersion)
}

// This endpoint is only callable by nodes in the cluster. Therefore,
// perform a node lookup using the secret ID to confirm the caller is a
// known node.
Expand Down Expand Up @@ -100,6 +108,13 @@ func (s *ServiceRegistration) DeleteByID(
}
defer metrics.MeasureSince([]string{"nomad", "service_registration", "delete_id"}, time.Now())

// Nomad service registrations can only be used once all servers, in the
// local region, have been upgraded to 1.3.0 or greater.
if !ServersMeetMinimumVersion(s.srv.Members(), s.srv.Region(), minNomadServiceRegistrationVersion, false) {
return fmt.Errorf("all servers should be running version %v or later to use the Nomad service provider",
minNomadServiceRegistrationVersion)
}

// Perform the ACL token resolution.
aclObj, err := s.srv.ResolveToken(args.AuthToken)

Expand Down

0 comments on commit 829584e

Please sign in to comment.