client: respect `client_auto_join` after connection loss (#11585)
The `consul.client_auto_join` configuration block tells the Nomad client whether to use Consul service discovery to find Nomad servers. By default it is set to `true`, but contrary to the documentation it was only respected during the initial client registration. If a client missed a heartbeat, failed a `Node.UpdateStatus` RPC, or if there was no Nomad leader, the client would fallback to Consul even if `client_auto_join` was set to `false`. This changeset returns early from the client's trigger for Consul discovery if the `client_auto_join` field is set to `false`.
This commit is contained in:
parent
39acac33a0
commit
6e1311a265
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:bug
|
||||||
|
client: Fixed a bug where clients would ignore the `client_auto_join` setting after losing connection with the servers, causing them to incorrectly fallback to Consul discovery if it was set to `false`.
|
||||||
|
```
|
|
@ -2690,6 +2690,7 @@ func taskIsPresent(taskName string, tasks []*structs.Task) bool {
|
||||||
|
|
||||||
// triggerDiscovery causes a Consul discovery to begin (if one hasn't already)
|
// triggerDiscovery causes a Consul discovery to begin (if one hasn't already)
|
||||||
func (c *Client) triggerDiscovery() {
|
func (c *Client) triggerDiscovery() {
|
||||||
|
if c.configCopy.ConsulConfig.ClientAutoJoin != nil && *c.configCopy.ConsulConfig.ClientAutoJoin {
|
||||||
select {
|
select {
|
||||||
case c.triggerDiscoveryCh <- struct{}{}:
|
case c.triggerDiscoveryCh <- struct{}{}:
|
||||||
// Discovery goroutine was released to execute
|
// Discovery goroutine was released to execute
|
||||||
|
@ -2697,6 +2698,7 @@ func (c *Client) triggerDiscovery() {
|
||||||
// Discovery goroutine was already running
|
// Discovery goroutine was already running
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// consulDiscovery waits for the signal to attempt server discovery via Consul.
|
// consulDiscovery waits for the signal to attempt server discovery via Consul.
|
||||||
// It's intended to be started in a goroutine. See triggerDiscovery() for
|
// It's intended to be started in a goroutine. See triggerDiscovery() for
|
||||||
|
|
Loading…
Reference in New Issue