From a5de25f2132da1e1a00d2f65c266df6c01ebf87d Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Sat, 10 Jun 2023 15:21:55 -0700 Subject: [PATCH] Only enable JetStream account updates in clustered mode. Signed-off-by: Derek Collison --- server/jetstream.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/server/jetstream.go b/server/jetstream.go index 8841f4edfce..4956d909b6c 100644 --- a/server/jetstream.go +++ b/server/jetstream.go @@ -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. @@ -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()