Support clustername change on reload, fixes #1492

Signed-off-by: Derek Collison <derek@nats.io>
This commit is contained in:
Derek Collison
2020-06-26 09:26:59 -07:00
parent 1a590eea78
commit e1adb58b06
2 changed files with 41 additions and 13 deletions

View File

@@ -297,25 +297,28 @@ type clusterOption struct {
}
// Apply the cluster change.
func (c *clusterOption) Apply(server *Server) {
func (c *clusterOption) Apply(s *Server) {
// TODO: support enabling/disabling clustering.
server.mu.Lock()
s.mu.Lock()
tlsRequired := c.newValue.TLSConfig != nil
server.routeInfo.TLSRequired = tlsRequired
server.routeInfo.TLSVerify = tlsRequired
server.routeInfo.AuthRequired = c.newValue.Username != ""
s.routeInfo.TLSRequired = tlsRequired
s.routeInfo.TLSVerify = tlsRequired
s.routeInfo.AuthRequired = c.newValue.Username != ""
if c.newValue.NoAdvertise {
server.routeInfo.ClientConnectURLs = nil
server.routeInfo.WSConnectURLs = nil
s.routeInfo.ClientConnectURLs = nil
s.routeInfo.WSConnectURLs = nil
} else {
server.routeInfo.ClientConnectURLs = server.clientConnectURLs
server.routeInfo.WSConnectURLs = server.websocket.connectURLs
s.routeInfo.ClientConnectURLs = s.clientConnectURLs
s.routeInfo.WSConnectURLs = s.websocket.connectURLs
}
server.setRouteInfoHostPortAndIP()
server.mu.Unlock()
server.Noticef("Reloaded: cluster")
s.setRouteInfoHostPortAndIP()
s.mu.Unlock()
if c.newValue.Name != "" && c.newValue.Name != s.ClusterName() {
s.setClusterName(c.newValue.Name)
}
s.Noticef("Reloaded: cluster")
if tlsRequired && c.newValue.TLSConfig.InsecureSkipVerify {
server.Warnf(clusterTLSInsecureWarning)
s.Warnf(clusterTLSInsecureWarning)
}
}

View File

@@ -1762,6 +1762,31 @@ func TestConfigReloadClusterNoAdvertise(t *testing.T) {
}
}
func TestConfigReloadClusterName(t *testing.T) {
s, _, conf := runReloadServerWithContent(t, []byte(`
listen: "0.0.0.0:-1"
cluster: {
name: "abc"
listen: "0.0.0.0:-1"
}
`))
defer os.Remove(conf)
defer s.Shutdown()
// Update config with a new cluster name.
reloadUpdateConfig(t, s, conf, `
listen: "0.0.0.0:-1"
cluster: {
name: "xyz"
listen: "0.0.0.0:-1"
}
`)
if s.ClusterName() != "xyz" {
t.Fatalf("Expected update clustername of \"xyz\", got %q", s.ClusterName())
}
}
func TestConfigReloadMaxSubsUnsupported(t *testing.T) {
s, _, conf := runReloadServerWithContent(t, []byte(`max_subs: 1`))
defer os.Remove(conf)