From e1adb58b067537deb366533c2b2c332c70d5c928 Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Fri, 26 Jun 2020 09:26:59 -0700 Subject: [PATCH] Support clustername change on reload, fixes #1492 Signed-off-by: Derek Collison --- server/reload.go | 29 ++++++++++++++++------------- server/reload_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/server/reload.go b/server/reload.go index aab7ff77..14bc7e3e 100644 --- a/server/reload.go +++ b/server/reload.go @@ -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) } } diff --git a/server/reload_test.go b/server/reload_test.go index 8afe7d75..fd7623e2 100644 --- a/server/reload_test.go +++ b/server/reload_test.go @@ -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)