From 748b7c32f480f4d5e3bd09307eb29f7ca580a85d Mon Sep 17 00:00:00 2001 From: Matthias Hanel Date: Mon, 24 May 2021 15:36:16 -0400 Subject: [PATCH] [fixed] deletion of js mappings on account jwt update fixed by moving setting of the mappings into a common function that is also called when the jwt is updated Signed-off-by: Matthias Hanel --- server/accounts.go | 2 +- server/jetstream.go | 40 +++++++++++++++++++++++++--------------- server/server.go | 2 +- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/server/accounts.go b/server/accounts.go index 88363274..30dcb025 100644 --- a/server/accounts.go +++ b/server/accounts.go @@ -3178,7 +3178,7 @@ func (s *Server) updateAccountClaimsWithRefresh(a *Account, ac *jwt.AccountClaim // We do not have JS enabled for this server, but the account has it enabled so setup // our imports properly. This allows this server to proxy JS traffic correctly. s.checkJetStreamExports() - a.enableAllJetStreamServiceImports() + a.enableAllJetStreamServiceImportsAndMappings() } for i, c := range clients { diff --git a/server/jetstream.go b/server/jetstream.go index ac3985bf..b9a0217a 100644 --- a/server/jetstream.go +++ b/server/jetstream.go @@ -477,8 +477,8 @@ func (s *Server) enableJetStreamAccounts() error { return nil } -// enableAllJetStreamServiceImports turns on all service imports for jetstream for this account. -func (a *Account) enableAllJetStreamServiceImports() error { +// enableAllJetStreamServiceImportsAndMappings turns on all service imports and mappings for jetstream for this account. +func (a *Account) enableAllJetStreamServiceImportsAndMappings() error { a.mu.RLock() s := a.srv a.mu.RUnlock() @@ -493,6 +493,26 @@ func (a *Account) enableAllJetStreamServiceImports() error { } } + // Check if we have a Domain specified. + // If so add in a subject mapping that will allow local connected clients to reach us here as well. + if opts := s.getOpts(); opts.JetStreamDomain != _EMPTY_ { + src := fmt.Sprintf(jsDomainAPI, opts.JetStreamDomain) + found := false + a.mu.RLock() + for _, m := range a.mappings { + if src == m.src { + found = true + break + } + } + a.mu.RUnlock() + if !found { + if err := a.AddMapping(src, jsAllAPI); err != nil { + s.Errorf("Error adding JetStream domain mapping: %v", err) + } + } + } + return nil } @@ -505,7 +525,7 @@ func (a *Account) enableJetStreamInfoServiceImportOnly() error { return nil } - return a.enableAllJetStreamServiceImports() + return a.enableAllJetStreamServiceImportsAndMappings() } func (s *Server) configJetStream(acc *Account) error { @@ -515,7 +535,7 @@ func (s *Server) configJetStream(acc *Account) error { if acc.jsLimits != nil { // Check if already enabled. This can be during a reload. if acc.JetStreamEnabled() { - if err := acc.enableAllJetStreamServiceImports(); err != nil { + if err := acc.enableAllJetStreamServiceImportsAndMappings(); err != nil { return err } if err := acc.UpdateJetStreamLimits(acc.jsLimits); err != nil { @@ -843,7 +863,7 @@ func (a *Account) EnableJetStream(limits *JetStreamAccountLimits) error { a.mu.Unlock() // Create the proper imports here. - if err := a.enableAllJetStreamServiceImports(); err != nil { + if err := a.enableAllJetStreamServiceImportsAndMappings(); err != nil { return err } @@ -851,16 +871,6 @@ func (a *Account) EnableJetStream(limits *JetStreamAccountLimits) error { s.Debugf(" Max Memory: %s", friendlyBytes(limits.MaxMemory)) s.Debugf(" Max Storage: %s", friendlyBytes(limits.MaxStore)) - // Check if we have a Domain specified. - // If so add in a subject mapping that will allow local connected clients to reach us here as well. - opts := s.getOpts() - if opts.JetStreamDomain != _EMPTY_ { - src := fmt.Sprintf(jsDomainAPI, opts.JetStreamDomain) - if err := a.AddMapping(src, jsAllAPI); err != nil { - s.Debugf("Error adding JetStream domain mapping: %v", err) - } - } - // Clean up any old snapshots that were orphaned while staging. os.RemoveAll(path.Join(js.config.StoreDir, snapStagingDir)) diff --git a/server/server.go b/server/server.go index 6fde16c0..3e9b1ca5 100644 --- a/server/server.go +++ b/server/server.go @@ -1613,7 +1613,7 @@ func (s *Server) Start() { acc.mu.RUnlock() if hasJs { s.checkJetStreamExports() - acc.enableAllJetStreamServiceImports() + acc.enableAllJetStreamServiceImportsAndMappings() } return true })