Skip to content

Commit 3ff8211

Browse files
committed
fix: http template read response.Body after cancel(), sometimes it return a context canceled error
Signed-off-by: AnonyScorpio <[email protected]>
1 parent 4eb7b01 commit 3ff8211

1 file changed

Lines changed: 9 additions & 11 deletions

File tree

workflow/executor/agent.go

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)