From d348199c924b33e684f9ff94009185ae97dcf885 Mon Sep 17 00:00:00 2001 From: Naeel Date: Mon, 27 Apr 2026 11:47:57 +0300 Subject: [PATCH] console: fix invoke client timeout --- console/internal/api/handlers.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/console/internal/api/handlers.go b/console/internal/api/handlers.go index 0bb1b00..8ff8049 100644 --- a/console/internal/api/handlers.go +++ b/console/internal/api/handlers.go @@ -142,6 +142,17 @@ func copyProxyResponseHeaders(dst, src http.Header) { } } +func doRequestWithContextTimeout(client *http.Client, req *http.Request) (*http.Response, error) { + if client == nil { + return http.DefaultClient.Do(req) + } + invokeClient := *client + // Для invoke реальный лимит должен определяться context timeout функции, + // а не общим HTTP timeout console. + invokeClient.Timeout = 0 + return invokeClient.Do(req) +} + // handleFunctionsRoot обрабатывает запросы к /console/api/functions без имени функции. // GET → список всех функций, POST → создать новую. func (s *Server) handleFunctionsRoot(w http.ResponseWriter, r *http.Request) { @@ -661,7 +672,7 @@ func (s *Server) handleInvokeFunction(w http.ResponseWriter, r *http.Request, na req.Header.Set("Authorization", "Bearer "+token) } - resp, err := s.http.Do(req) + resp, err := doRequestWithContextTimeout(s.http, req) if err != nil { // Отличаем timeout от сетевой ошибки. if errors.Is(err, context.DeadlineExceeded) { @@ -770,7 +781,7 @@ func (s *Server) handleInvokeRoute(w http.ResponseWriter, r *http.Request) { req.Header.Set("Authorization", "Bearer "+token) } - resp, err := s.http.Do(req) + resp, err := doRequestWithContextTimeout(s.http, req) if err != nil { if errors.Is(err, context.DeadlineExceeded) { writeJSONError(w, http.StatusBadGateway, fmt.Sprintf("invoke route %q timeout after %s", route, invokeTimeout))