-
Notifications
You must be signed in to change notification settings - Fork 134
Closed
Description
While reading through the executor for another change, I realized that as of #632 / #584 we're applying the job timeout after stepping through all the middleware:
Lines 209 to 227 in fc667eb
| doInner := func(ctx context.Context) error { | |
| jobTimeout := e.WorkUnit.Timeout() | |
| if jobTimeout == 0 { | |
| jobTimeout = e.ClientJobTimeout | |
| } | |
| // No timeout if a -1 was specified. | |
| if jobTimeout > 0 { | |
| var cancel context.CancelFunc | |
| ctx, cancel = context.WithTimeout(ctx, jobTimeout) | |
| defer cancel() | |
| } | |
| if err := e.WorkUnit.Work(ctx); err != nil { | |
| return err | |
| } | |
| return nil | |
| } |
I'm not sure if this was an intentional decision and I couldn't find any conversations where it was mentioned, so I thought we should at least talk about it. Do you think this is the right place for it, or should the timeout happen before the middleware stack gets called? I was thinking of a worst case scenario where a middleware got stuck or took awhile on a blocking operation and the job ended up running far longer than either the job's timeout or the client's default timeout.
Metadata
Metadata
Assignees
Labels
No labels