Add shutdown state checks in HTTP handlers

This commit is contained in:
2025-10-30 18:00:59 +01:00
parent c340439306
commit 560850f86d
3 changed files with 14 additions and 9 deletions

View File

@@ -154,16 +154,8 @@ func (p *proxy) build() (*httputil.ReverseProxy, error) {
return proxy, nil return proxy, nil
} }
// serveHTTP handles HTTP requests with inflight tracking and shutting down state checks // serveHTTP handles HTTP requests with inflight tracking
func (p *proxy) serveHTTP(w http.ResponseWriter, r *http.Request) error { func (p *proxy) serveHTTP(w http.ResponseWriter, r *http.Request) error {
// Check if instance is shutting down
status := p.instance.GetStatus()
if status == ShuttingDown {
w.WriteHeader(http.StatusServiceUnavailable)
w.Write([]byte("Instance is shutting down"))
return fmt.Errorf("instance is shutting down")
}
// Get the reverse proxy // Get the reverse proxy
reverseProxy, err := p.get() reverseProxy, err := p.get()
if err != nil { if err != nil {

View File

@@ -109,6 +109,12 @@ func (h *Handler) LlamaCppProxy() http.HandlerFunc {
return return
} }
// Check if instance is shutting down before autostart logic
if inst.GetStatus() == instance.ShuttingDown {
writeError(w, http.StatusServiceUnavailable, "instance_shutting_down", "Instance is shutting down")
return
}
if !inst.IsRemote() && !inst.IsRunning() { if !inst.IsRemote() && !inst.IsRunning() {
err := h.ensureInstanceRunning(inst) err := h.ensureInstanceRunning(inst)
if err != nil { if err != nil {

View File

@@ -4,6 +4,7 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"io" "io"
"llamactl/pkg/instance"
"llamactl/pkg/validation" "llamactl/pkg/validation"
"net/http" "net/http"
) )
@@ -106,6 +107,12 @@ func (h *Handler) OpenAIProxy() http.HandlerFunc {
return return
} }
// Check if instance is shutting down before autostart logic
if inst.GetStatus() == instance.ShuttingDown {
writeError(w, http.StatusServiceUnavailable, "instance_shutting_down", "Instance is shutting down")
return
}
if !inst.IsRemote() && !inst.IsRunning() { if !inst.IsRemote() && !inst.IsRunning() {
err := h.ensureInstanceRunning(inst) err := h.ensureInstanceRunning(inst)
if err != nil { if err != nil {