1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
package agent
import (
"context"
"k8s.io/apimachinery/pkg/util/wait"
)
type stoppableTask interface {
StopAndWait()
}
// TODO: enhance this to be able to capture and return error from the task being run
//
// issue: https://gitlab.com/gitlab-org/gitlab/-/issues/404773
type simpleStoppableTask struct {
cancel context.CancelFunc
wg wait.Group
}
func (t *simpleStoppableTask) StopAndWait() {
t.cancel()
t.wg.Wait()
}
func newStoppableTask(ctx context.Context, fn func(ctx context.Context)) stoppableTask {
taskCtx, cancel := context.WithCancel(ctx)
task := &simpleStoppableTask{
cancel: cancel,
}
task.wg.StartWithContext(taskCtx, fn)
return task
}
|