@@ -249,7 +249,13 @@ func (ae *AgentExecutor) executeHTTPTemplate(ctx context.Context, tmpl wfv1.Temp
249249 if tmpl .HTTP == nil {
250250 return 0 , nil
251251 }
252-
252+ // Read response.Body after cancel(), sometimes it return a context canceled error
253+ // For more detail https://groups.google.com/g/golang-nuts/c/2FKwG6oEvos
254+ var cancel context.CancelFunc
255+ if tmpl .HTTP .TimeoutSeconds != nil {
256+ ctx , cancel = context .WithTimeout (ctx , time .Duration (* tmpl .HTTP .TimeoutSeconds )* time .Second )
257+ defer cancel ()
258+ }
253259 response , err := ae .executeHTTPTemplateRequest (ctx , tmpl .HTTP )
254260 if err != nil {
255261 return 0 , err
@@ -320,23 +326,15 @@ func (ae *AgentExecutor) executeHTTPTemplateRequest(ctx context.Context, httpTem
320326 )
321327 if httpTemplate .BodyFrom != nil {
322328 if httpTemplate .BodyFrom .Bytes != nil {
323- request , err = http .NewRequest ( httpTemplate .Method , httpTemplate .URL , bytes .NewBuffer (httpTemplate .BodyFrom .Bytes ))
329+ request , err = http .NewRequestWithContext ( ctx , httpTemplate .Method , httpTemplate .URL , bytes .NewBuffer (httpTemplate .BodyFrom .Bytes ))
324330 }
325331 } else {
326- request , err = http .NewRequest ( httpTemplate .Method , httpTemplate .URL , bytes .NewBufferString (httpTemplate .Body ))
332+ request , err = http .NewRequestWithContext ( ctx , httpTemplate .Method , httpTemplate .URL , bytes .NewBufferString (httpTemplate .Body ))
327333 }
328334 if err != nil {
329335 return nil , err
330336 }
331337
332- if httpTemplate .TimeoutSeconds != nil {
333- ctx , cancel := context .WithTimeout (ctx , time .Duration (* httpTemplate .TimeoutSeconds )* time .Second )
334- defer cancel ()
335- request = request .WithContext (ctx )
336- } else {
337- request = request .WithContext (ctx )
338- }
339-
340338 for _ , header := range httpTemplate .Headers {
341339 value := header .Value
342340 if header .ValueFrom != nil && header .ValueFrom .SecretKeyRef != nil {
0 commit comments