Skip to content

Commit

Permalink
[IMPROVED] Only enable JetStream account updates in clustered mode. (#…
Browse files Browse the repository at this point in the history
…4233)

If we know we are in stand alone mode we do not need to run the updates
for JetStream account resources updates.

Signed-off-by: Derek Collison <derek@nats.io>

Resolves #4227 (Partial)
  • Loading branch information
derekcollison committed Jun 11, 2023
2 parents 783e949 + a5de25f commit aae218f
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions server/jetstream.go
Expand Up @@ -1020,9 +1020,9 @@ func (a *Account) EnableJetStream(limits map[string]JetStreamAccountLimits) erro
return fmt.Errorf("jetstream can not be enabled on the system account")
}

s.mu.Lock()
s.mu.RLock()
sendq := s.sys.sendq
s.mu.Unlock()
s.mu.RUnlock()

// No limits means we dynamically set up limits.
// We also place limits here so we know that the account is configured for JetStream.
Expand Down Expand Up @@ -1054,12 +1054,15 @@ func (a *Account) EnableJetStream(limits map[string]JetStreamAccountLimits) erro
jsa := &jsAccount{js: js, account: a, limits: limits, streams: make(map[string]*stream), sendq: sendq, usage: make(map[string]*jsaStorage)}
jsa.storeDir = filepath.Join(js.config.StoreDir, a.Name)

jsa.usageMu.Lock()
jsa.utimer = time.AfterFunc(usageTick, jsa.sendClusterUsageUpdateTimer)
// Cluster mode updates to resource usage, but we always will turn on. System internal prevents echos.
jsa.updatesPub = fmt.Sprintf(jsaUpdatesPubT, a.Name, sysNode)
jsa.updatesSub, _ = s.sysSubscribe(fmt.Sprintf(jsaUpdatesSubT, a.Name), jsa.remoteUpdateUsage)
jsa.usageMu.Unlock()
// A single server does not need to do the account updates at this point.
if js.cluster != nil || !s.standAloneMode() {
jsa.usageMu.Lock()
jsa.utimer = time.AfterFunc(usageTick, jsa.sendClusterUsageUpdateTimer)
// Cluster mode updates to resource usage. System internal prevents echos.
jsa.updatesPub = fmt.Sprintf(jsaUpdatesPubT, a.Name, sysNode)
jsa.updatesSub, _ = s.sysSubscribe(fmt.Sprintf(jsaUpdatesSubT, a.Name), jsa.remoteUpdateUsage)
jsa.usageMu.Unlock()
}

js.accounts[a.Name] = jsa
js.mu.Unlock()
Expand Down

0 comments on commit aae218f

Please sign in to comment.