console: fix invoke client timeout

This commit is contained in:
Naeel
2026-04-27 11:47:57 +03:00
parent a464651046
commit d348199c92
+13 -2
View File
@@ -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))