diff --git a/server/events_test.go b/server/events_test.go index 605e687f..f78cdaa3 100644 --- a/server/events_test.go +++ b/server/events_test.go @@ -2178,7 +2178,7 @@ func TestServerEventsPingMonitorz(t *testing.T) { {"JSZ", nil, &JSzOptions{}, []string{"now", "disabled"}}, {"HEALTHZ", nil, &JSzOptions{}, []string{"status"}}, - {"HEALTHZ", &HealthzOptions{JSEnabled: true}, &JSzOptions{}, []string{"status"}}, + {"HEALTHZ", &HealthzOptions{JSEnabledOnly: true}, &JSzOptions{}, []string{"status"}}, {"HEALTHZ", &HealthzOptions{JSServerOnly: true}, &JSzOptions{}, []string{"status"}}, } diff --git a/server/jetstream_cluster_3_test.go b/server/jetstream_cluster_3_test.go index fb53caf1..a8161039 100644 --- a/server/jetstream_cluster_3_test.go +++ b/server/jetstream_cluster_3_test.go @@ -406,8 +406,8 @@ func TestJetStreamClusterDeleteConsumerWhileServerDown(t *testing.T) { s = c.restartServer(s) checkFor(t, time.Second, 200*time.Millisecond, func() error { hs := s.healthz(&HealthzOptions{ - JSEnabled: true, - JSServerOnly: false, + JSEnabledOnly: false, + JSServerOnly: false, }) if hs.Error != _EMPTY_ { return errors.New(hs.Error) @@ -448,8 +448,8 @@ func TestJetStreamClusterDeleteConsumerWhileServerDown(t *testing.T) { s = c.restartServer(s) checkFor(t, time.Second, 200*time.Millisecond, func() error { hs := s.healthz(&HealthzOptions{ - JSEnabled: true, - JSServerOnly: false, + JSEnabledOnly: false, + JSServerOnly: false, }) if hs.Error != _EMPTY_ { return errors.New(hs.Error) diff --git a/server/jetstream_test.go b/server/jetstream_test.go index f9cbba83..b66978c3 100644 --- a/server/jetstream_test.go +++ b/server/jetstream_test.go @@ -17365,14 +17365,19 @@ func TestJetStreamWorkQueueSourceNamingRestart(t *testing.T) { } func TestJetStreamDisabledHealthz(t *testing.T) { - s := RunRandClientPortServer() + s := RunBasicJetStreamServer() + if config := s.JetStreamConfig(); config != nil { + defer removeDir(t, config.StoreDir) + } defer s.Shutdown() - if s.JetStreamEnabled() { - t.Fatalf("Expected JetStream to be disabled") + if !s.JetStreamEnabled() { + t.Fatalf("Expected JetStream to be enabled") } - hs := s.healthz(&HealthzOptions{JSEnabled: true}) + s.DisableJetStream() + + hs := s.healthz(&HealthzOptions{JSEnabledOnly: true}) if hs.Status == "unavailable" && hs.Error == NewJSNotEnabledError().Error() { return } diff --git a/server/monitor.go b/server/monitor.go index c78afe93..5c5a5b7f 100644 --- a/server/monitor.go +++ b/server/monitor.go @@ -2631,8 +2631,8 @@ type JSzOptions struct { // HealthzOptions are options passed to Healthz type HealthzOptions struct { - JSEnabled bool `json:"js-enabled,omitempty"` - JSServerOnly bool `json:"js-server-only,omitempty"` + JSEnabledOnly bool `json:"js-enabled-only,omitempty"` + JSServerOnly bool `json:"js-server-only,omitempty"` } type StreamDetail struct { @@ -2972,14 +2972,21 @@ func (s *Server) HandleHealthz(w http.ResponseWriter, r *http.Request) { if err != nil { return } + if jsEnabled { + s.Warnf("Healthcheck: js-enabled deprecated, use js-enabled-only instead") + } + jsEnabledOnly, err := decodeBool(w, r, "js-enabled-only") + if err != nil { + return + } jsServerOnly, err := decodeBool(w, r, "js-server-only") if err != nil { return } hs := s.healthz(&HealthzOptions{ - JSEnabled: jsEnabled, - JSServerOnly: jsServerOnly, + JSEnabledOnly: jsEnabledOnly || jsEnabled, + JSServerOnly: jsServerOnly, }) if hs.Error != _EMPTY_ { s.Warnf("Healthcheck failed: %q", hs.Error) @@ -3008,15 +3015,23 @@ func (s *Server) healthz(opts *HealthzOptions) *HealthStatus { return health } - // Check JetStream + sopts := s.getOpts() + + // If JS is not enabled in the config, we stop. + if !sopts.JetStream { + return health + } + + // Access the Jetstream state to perform additional checks. js := s.getJetStream() - if js == nil { - // If JetStream should be enabled then return error status. - if opts.JSEnabled { - health.Status = "unavailable" - health.Error = NewJSNotEnabledError().Error() - return health - } + + if !js.isEnabled() { + health.Status = "unavailable" + health.Error = NewJSNotEnabledError().Error() + return health + } + // Only check if JS is enabled, skip meta and asset check. + if opts.JSEnabledOnly { return health }