Merge pull request #2132 from wallyqs/oor-data-race

Fix for data race when disabling JS running out of resources
This commit is contained in:
Waldemar Quevedo
2021-04-21 14:54:45 -07:00
committed by GitHub
2 changed files with 23 additions and 3 deletions

View File

@@ -493,8 +493,16 @@ func (s *Server) configAllJetStreamAccounts() error {
// JetStreamEnabled reports if jetstream is enabled.
func (s *Server) JetStreamEnabled() bool {
s.mu.Lock()
enabled := s.js != nil && !s.js.disabled
js := s.js
s.mu.Unlock()
var enabled bool
if js != nil {
js.mu.RLock()
enabled = !js.disabled
js.mu.RUnlock()
}
return enabled
}

View File

@@ -464,10 +464,22 @@ func (s *Server) startRaftNode(cfg *RaftConfig) (RaftNode, error) {
// outOfResources checks to see if we are out of resources.
func (n *raft) outOfResources() bool {
if !n.track || n.js == nil || n.js.disabled {
n.RLock()
js := n.js
if !n.track || js == nil {
n.RUnlock()
return false
}
return n.js.limitsExceeded(n.wtype)
n.RUnlock()
js.mu.RLock()
jsDisabled := js.disabled
js.mu.RUnlock()
if jsDisabled {
return false
}
return js.limitsExceeded(n.wtype)
}
// Maps node names back to server names.