From 4eb4e5496bdf3d37c776e09f58d42e037bb93706 Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Sat, 29 Apr 2023 09:36:35 -0700 Subject: [PATCH] Do health check on startup once we have processed existing state. Also do health checks in separate go routine. Signed-off-by: Derek Collison --- server/jetstream_cluster.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/server/jetstream_cluster.go b/server/jetstream_cluster.go index cf177926..4cc59281 100644 --- a/server/jetstream_cluster.go +++ b/server/jetstream_cluster.go @@ -1142,6 +1142,13 @@ func (js *jetStream) monitorCluster() { ht := time.NewTicker(healthCheckInterval) defer ht.Stop() + // Utility to check health. + checkHealth := func() { + if hs := s.healthz(nil); hs.Error != _EMPTY_ { + s.Warnf("%v", hs.Error) + } + } + var ( isLeader bool lastSnapTime time.Time @@ -1216,6 +1223,8 @@ func (js *jetStream) monitorCluster() { ru = nil s.Debugf("Recovered JetStream cluster metadata") js.checkForOrphans() + // Do a health check here as well. + go checkHealth() continue } // FIXME(dlc) - Deal with errors. @@ -1232,6 +1241,7 @@ func (js *jetStream) monitorCluster() { } } aq.recycle(&ces) + case isLeader = <-lch: // For meta layer synchronize everyone to our state on becoming leader. if isLeader { @@ -1253,9 +1263,8 @@ func (js *jetStream) monitorCluster() { js.checkClusterSize() } case <-ht.C: - if hs := s.healthz(nil); hs.Error != _EMPTY_ { - s.Warnf("%v", hs.Error) - } + // Do this in a separate go routine. + go checkHealth() case <-lt.C: s.Debugf("Checking JetStream cluster state")