From ab7f3fcfa5b45fefc2a7eb785111818d650dbe33 Mon Sep 17 00:00:00 2001 From: AdheipSingh Date: Fri, 15 May 2026 02:20:51 +0530 Subject: [PATCH] fix: correct default healthcheck probe logic and enable probes by default --- apis/druid/v1alpha1/druid_types.go | 7 +++---- controllers/druid/handler.go | 32 +++++++++++++++++++++--------- controllers/druid/types.go | 4 ++++ 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/apis/druid/v1alpha1/druid_types.go b/apis/druid/v1alpha1/druid_types.go index 34c68a1..9227475 100644 --- a/apis/druid/v1alpha1/druid_types.go +++ b/apis/druid/v1alpha1/druid_types.go @@ -270,11 +270,10 @@ type DruidSpec struct { // +kubebuilder:default:=true RollingDeploy bool `json:"rollingDeploy"` - // DefaultProbes If set to true this will add default probes (liveness / readiness / startup) for all druid components - // but it won't override existing probes + // DefaultProbes defaults to true. When enabled, adds default probes (liveness / readiness / startup) + // for all druid components but won't override existing probes. Set to false to disable. // +optional - // +kubebuilder:default:=true - DefaultProbes bool `json:"defaultProbes"` + DefaultProbes *bool `json:"defaultProbes,omitempty"` // Zookeeper IGNORED (Future API): In order to make Druid dependency setup extensible from within Druid operator. // +optional diff --git a/controllers/druid/handler.go b/controllers/druid/handler.go index b236ef4..d4daf94 100644 --- a/controllers/druid/handler.go +++ b/controllers/druid/handler.go @@ -954,33 +954,33 @@ func getAffinity(nodeSpec *v1alpha1.DruidNodeSpec, m *v1alpha1.Druid) *v1.Affini } func setLivenessProbe(nodeSpec *v1alpha1.DruidNodeSpec, m *v1alpha1.Druid) *v1.Probe { - probeType := "liveness" + probeType := probeTypeLiveness livenessProbe := updateDefaultPortInProbe( firstNonNilValue(nodeSpec.LivenessProbe, m.Spec.LivenessProbe).(*v1.Probe), nodeSpec.DruidPort) - if livenessProbe == nil && m.Spec.DefaultProbes { + if livenessProbe == nil && (m.Spec.DefaultProbes == nil || *m.Spec.DefaultProbes) { livenessProbe = setDefaultProbe(nodeSpec.DruidPort, nodeSpec.NodeType, probeType) } return livenessProbe } func setReadinessProbe(nodeSpec *v1alpha1.DruidNodeSpec, m *v1alpha1.Druid) *v1.Probe { - probeType := "readiness" + probeType := probeTypeReadiness readinessProbe := updateDefaultPortInProbe( firstNonNilValue(nodeSpec.ReadinessProbe, m.Spec.ReadinessProbe).(*v1.Probe), nodeSpec.DruidPort) - if readinessProbe == nil && m.Spec.DefaultProbes { + if readinessProbe == nil && (m.Spec.DefaultProbes == nil || *m.Spec.DefaultProbes) { readinessProbe = setDefaultProbe(nodeSpec.DruidPort, nodeSpec.NodeType, probeType) } return readinessProbe } func setStartUpProbe(nodeSpec *v1alpha1.DruidNodeSpec, m *v1alpha1.Druid) *v1.Probe { - probeType := "startup" + probeType := probeTypeStartup startUpProbe := updateDefaultPortInProbe( firstNonNilValue(nodeSpec.StartUpProbe, m.Spec.StartUpProbe).(*v1.Probe), nodeSpec.DruidPort) - if startUpProbe == nil && m.Spec.DefaultProbes { + if startUpProbe == nil && (m.Spec.DefaultProbes == nil || *m.Spec.DefaultProbes) { startUpProbe = setDefaultProbe(nodeSpec.DruidPort, nodeSpec.NodeType, probeType) } return startUpProbe @@ -1166,20 +1166,34 @@ func setDefaultProbe(defaultPort int32, nodeType string, probeType string) *v1.P FailureThreshold: 10, } - if nodeType == historical && probeType != "liveness" { + // Liveness probes use the default /status/health for all node types. + if probeType == probeTypeLiveness { + return probe + } + + if probeType == probeTypeReadiness && nodeType == historical { probe.HTTPGet.Path = "/druid/historical/v1/readiness" probe.FailureThreshold = 20 } - if nodeType == broker && probeType != "liveness" { + + if probeType == probeTypeReadiness && nodeType == broker { probe.HTTPGet.Path = "/druid/broker/v1/readiness" probe.FailureThreshold = 20 } - if nodeType == historical && probeType == "startup" { + if probeType == probeTypeStartup && nodeType == historical { + probe.HTTPGet.Path = "/druid/historical/v1/readiness" probe.InitialDelaySeconds = 180 probe.PeriodSeconds = 30 probe.TimeoutSeconds = 10 + probe.FailureThreshold = 20 } + + if probeType == probeTypeStartup && nodeType == broker { + probe.HTTPGet.Path = "/druid/broker/v1/readiness" + probe.FailureThreshold = 20 + } + return probe } diff --git a/controllers/druid/types.go b/controllers/druid/types.go index fc1236f..f176b82 100644 --- a/controllers/druid/types.go +++ b/controllers/druid/types.go @@ -28,4 +28,8 @@ const ( indexer = "indexer" historical = "historical" router = "router" + + probeTypeLiveness = "liveness" + probeTypeReadiness = "readiness" + probeTypeStartup = "startup" )