console: fix invoke client timeout
This commit is contained in:
@@ -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 без имени функции.
|
// handleFunctionsRoot обрабатывает запросы к /console/api/functions без имени функции.
|
||||||
// GET → список всех функций, POST → создать новую.
|
// GET → список всех функций, POST → создать новую.
|
||||||
func (s *Server) handleFunctionsRoot(w http.ResponseWriter, r *http.Request) {
|
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)
|
req.Header.Set("Authorization", "Bearer "+token)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := s.http.Do(req)
|
resp, err := doRequestWithContextTimeout(s.http, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Отличаем timeout от сетевой ошибки.
|
// Отличаем timeout от сетевой ошибки.
|
||||||
if errors.Is(err, context.DeadlineExceeded) {
|
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)
|
req.Header.Set("Authorization", "Bearer "+token)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := s.http.Do(req)
|
resp, err := doRequestWithContextTimeout(s.http, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, context.DeadlineExceeded) {
|
if errors.Is(err, context.DeadlineExceeded) {
|
||||||
writeJSONError(w, http.StatusBadGateway, fmt.Sprintf("invoke route %q timeout after %s", route, invokeTimeout))
|
writeJSONError(w, http.StatusBadGateway, fmt.Sprintf("invoke route %q timeout after %s", route, invokeTimeout))
|
||||||
|
|||||||
Reference in New Issue
Block a user