diff --git a/internal/http/healthz/livez_handler.go b/internal/http/healthz/livez_handler.go new file mode 100644 index 0000000000..3346dccc8c --- /dev/null +++ b/internal/http/healthz/livez_handler.go @@ -0,0 +1,39 @@ +// Licensed to the LF AI & Data foundation under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package healthz + +import ( + "fmt" + "net/http" +) + +// LivenessHandler returns the HTTP Handler for the LIGHTWEIGHT liveness check (/livez). +// This is designed to be the target for the Kubernetes Liveness Probe. +func LivenessHandler() http.Handler { + return http.HandlerFunc(LivezHandlerFunc) +} + +// LivezHandlerFunc executes the minimal, non-blocking check for process activity. +// It confirms the Go scheduler is active and the HTTP server can respond immediately. +func LivezHandlerFunc(w http.ResponseWriter, r *http.Request) { + // IMPORTANT: This check must be non-blocking. No external calls (Etcd, MinIO) + // or checks against other internal Milvus component states are allowed here. + + w.WriteHeader(http.StatusOK) + // Return a simple string to confirm scheduler activity. + fmt.Fprintln(w, "Milvus Process Active") +} diff --git a/internal/http/router.go b/internal/http/router.go index f2350c7e4b..385c144801 100644 --- a/internal/http/router.go +++ b/internal/http/router.go @@ -19,6 +19,9 @@ package http // HealthzRouterPath is default path for check health state. const HealthzRouterPath = "/healthz" +// LivezRouterPath is the lightweight path dedicated to checking process liveness. +const LivezRouterPath = "/livez" + // LogLevelRouterPath is path for Get and Update log level at runtime. const LogLevelRouterPath = "/log/level" diff --git a/internal/http/server.go b/internal/http/server.go index 87d55873d4..e68d626613 100644 --- a/internal/http/server.go +++ b/internal/http/server.go @@ -76,6 +76,10 @@ func registerDefaults() { Path: HealthzRouterPath, Handler: healthz.Handler(), }) + Register(&Handler{ + Path: LivezRouterPath, + Handler: healthz.LivenessHandler(), + }) Register(&Handler{ Path: EventLogRouterPath, Handler: eventlog.Handler(),