From 6b9008c1f4bb8ce3d1a22f989503a8f04357bf1a Mon Sep 17 00:00:00 2001 From: Waldemar Quevedo Date: Sat, 5 Aug 2023 18:19:57 -0700 Subject: [PATCH] Fixes to service imports on reload Signed-off-by: Waldemar Quevedo --- server/events.go | 2 +- server/reload_test.go | 2 -- server/server.go | 16 +++++++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/server/events.go b/server/events.go index 19bedf84..01ed965d 100644 --- a/server/events.go +++ b/server/events.go @@ -1935,7 +1935,7 @@ func (s *Server) registerSystemImports(a *Account) { return } sacc := s.SystemAccount() - if sacc == nil { + if sacc == nil || sacc == a { return } // FIXME(dlc) - make a shared list between sys exports etc. diff --git a/server/reload_test.go b/server/reload_test.go index e2f85d36..9f0410c7 100644 --- a/server/reload_test.go +++ b/server/reload_test.go @@ -2509,7 +2509,6 @@ func TestConfigReloadClusterPermsOldServer(t *testing.T) { } func TestConfigReloadAccountUsers(t *testing.T) { - t.Skip("fix for this needs to be revisited for v2.10 release") conf := createConfFile(t, []byte(` listen: "127.0.0.1:-1" accounts { @@ -2727,7 +2726,6 @@ func TestConfigReloadAccountUsers(t *testing.T) { } func TestConfigReloadAccountWithNoChanges(t *testing.T) { - t.Skip("fix for this needs to be revisited for v2.10 release") conf := createConfFile(t, []byte(` listen: "127.0.0.1:-1" system_account: sys diff --git a/server/server.go b/server/server.go index fcda8bae..eaf88027 100644 --- a/server/server.go +++ b/server/server.go @@ -1112,7 +1112,7 @@ func (s *Server) configureAccounts(reloading bool) (map[string]struct{}, error) a.mu.Lock() acc.shallowCopy(a) a.mu.Unlock() - // Will be a no-op in case of the global account since it is alrady registered. + // Will be a no-op in case of the global account since it is already registered. s.registerAccountNoLock(a) } // The `acc` account is stored in options, not in the server, and these can be cleared. @@ -1202,6 +1202,9 @@ func (s *Server) configureAccounts(reloading bool) (map[string]struct{}, error) c.processUnsub(sid) } acc.addAllServiceImportSubs() + s.mu.Unlock() + s.registerSystemImports(acc) + s.mu.Lock() } // Set the system account if it was configured. @@ -1214,10 +1217,6 @@ func (s *Server) configureAccounts(reloading bool) (map[string]struct{}, error) if err == nil && s.sys != nil && acc != s.sys.account { // sys.account.clients (including internal client)/respmap/etc... are transferred separately s.sys.account = acc - s.mu.Unlock() - // acquires server lock separately - s.addSystemAccountExports(acc) - s.mu.Lock() } if err != nil { return awcsti, fmt.Errorf("error resolving system account: %v", err) @@ -1247,6 +1246,13 @@ func (s *Server) configureAccounts(reloading bool) (map[string]struct{}, error) } } + // Add any required exports from system account. + if s.sys != nil { + s.mu.Unlock() + s.addSystemAccountExports(s.sys.account) + s.mu.Lock() + } + return awcsti, nil }