mirror of
https://github.com/kemko/nomad.git
synced 2026-01-03 17:05:43 +03:00
Fix original client server list behavior
This commit is contained in:
@@ -269,7 +269,7 @@ func NewClient(cfg *config.Config, consulCatalog consul.CatalogAPI, consulServic
|
||||
// Set the preconfigured list of static servers
|
||||
c.configLock.RLock()
|
||||
if len(c.configCopy.Servers) > 0 {
|
||||
if err := c.SetServers(c.configCopy.Servers); err != nil {
|
||||
if err := c.setServersImpl(c.configCopy.Servers, true); err != nil {
|
||||
logger.Printf("[WARN] client: None of the configured servers are valid: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -605,6 +605,16 @@ func (c *Client) GetServers() []string {
|
||||
// SetServers sets a new list of nomad servers to connect to. As long as one
|
||||
// server is resolvable no error is returned.
|
||||
func (c *Client) SetServers(in []string) error {
|
||||
return c.setServersImpl(in, false)
|
||||
}
|
||||
|
||||
// setServersImpl sets a new list of nomad servers to connect to. If force is
|
||||
// set, we add the server to the internal severlist even if the server could not
|
||||
// be pinged. An error is returned if no endpoints were valid when non-forcing.
|
||||
//
|
||||
// Force should be used when setting the servers from the initial configuration
|
||||
// since the server may be starting up in parallel and initial pings may fail.
|
||||
func (c *Client) setServersImpl(in []string, force bool) error {
|
||||
var mu sync.Mutex
|
||||
var wg sync.WaitGroup
|
||||
var merr multierror.Error
|
||||
@@ -625,7 +635,12 @@ func (c *Client) SetServers(in []string) error {
|
||||
// Try to ping to check if it is a real server
|
||||
if err := c.Ping(addr); err != nil {
|
||||
merr.Errors = append(merr.Errors, fmt.Errorf("Server at address %s failed ping: %v", addr, err))
|
||||
return
|
||||
|
||||
// If we are forcing the setting of the servers, inject it to
|
||||
// the serverlist even if we can't ping immediately.
|
||||
if !force {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
mu.Lock()
|
||||
|
||||
@@ -905,10 +905,9 @@ func TestClient_ReloadTLS_DowngradeTLSToPlaintext(t *testing.T) {
|
||||
return false, fmt.Errorf("client RPC succeeded when it should have failed :\n%+v", err)
|
||||
}
|
||||
return true, nil
|
||||
}, func(err error) {
|
||||
t.Fatalf(err.Error())
|
||||
},
|
||||
func(err error) {
|
||||
t.Fatalf(err.Error())
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@@ -931,10 +930,9 @@ func TestClient_ReloadTLS_DowngradeTLSToPlaintext(t *testing.T) {
|
||||
return false, fmt.Errorf("client RPC failed when it should have succeeded:\n%+v", err)
|
||||
}
|
||||
return true, nil
|
||||
}, func(err error) {
|
||||
t.Fatalf(err.Error())
|
||||
},
|
||||
func(err error) {
|
||||
t.Fatalf(err.Error())
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,18 +98,6 @@ func (s Servers) cycle() {
|
||||
s[numServers-1] = start
|
||||
}
|
||||
|
||||
// removeServerByKey performs an inline removal of the first matching server
|
||||
func (s Servers) removeServerByKey(targetKey string) {
|
||||
for i, srv := range s {
|
||||
if targetKey == srv.String() {
|
||||
copy(s[i:], s[i+1:])
|
||||
s[len(s)-1] = nil
|
||||
s = s[:len(s)-1]
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// shuffle shuffles the server list in place
|
||||
func (s Servers) shuffle() {
|
||||
for i := len(s) - 1; i > 0; i-- {
|
||||
|
||||
Reference in New Issue
Block a user