mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
remove the nanny
we finally graduated high school and can make our own ramen we no longer need this since fn appears to have no concept of canceling tasks through an api we need to watch, and the context is plumbed if the request is canceled. since tasks are short, we may never need to do cancellation of running tasks like we had with iron worker. this was an added docker call that's unnecessary since we are doing force removal of the container at the end anyway.
This commit is contained in:
@@ -394,12 +394,7 @@ func (drv *DockerDriver) run(ctx context.Context, container string, task drivers
|
||||
} else {
|
||||
ctx, cancel = context.WithTimeout(ctx, timeout)
|
||||
}
|
||||
defer cancel() // do this so that after Run exits, nanny and collect stop
|
||||
var complete bool
|
||||
defer func() { complete = true }() // run before cancel is called
|
||||
ctx = context.WithValue(ctx, completeKey, &complete)
|
||||
|
||||
go drv.nanny(ctx, container)
|
||||
defer cancel() // do this so that after Run exits, collect stops
|
||||
go drv.collectStats(ctx, container, task)
|
||||
|
||||
mwOut, mwErr := task.Logger()
|
||||
@@ -446,28 +441,6 @@ func (drv *DockerDriver) run(ctx context.Context, container string, task drivers
|
||||
}, nil
|
||||
}
|
||||
|
||||
const completeKey = "complete"
|
||||
|
||||
// watch for cancel or timeout and kill process.
|
||||
func (drv *DockerDriver) nanny(ctx context.Context, container string) {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
if *(ctx.Value(completeKey).(*bool)) {
|
||||
return
|
||||
}
|
||||
drv.cancel(container)
|
||||
}
|
||||
}
|
||||
|
||||
func (drv *DockerDriver) cancel(container string) {
|
||||
stopTimer := drv.NewTimer("docker", "stop_container", 1.0)
|
||||
err := drv.docker.StopContainer(container, 30)
|
||||
stopTimer.Measure()
|
||||
if err != nil {
|
||||
logrus.WithError(err).WithFields(logrus.Fields{"container": container, "errType": fmt.Sprintf("%T", err)}).Error("something managed to escape our retries web, could not kill container")
|
||||
}
|
||||
}
|
||||
|
||||
func (drv *DockerDriver) collectStats(ctx context.Context, container string, task drivers.ContainerTask) {
|
||||
log := common.Logger(ctx)
|
||||
done := make(chan bool)
|
||||
|
||||
@@ -37,7 +37,6 @@ type dockerClient interface {
|
||||
PullImage(opts docker.PullImageOptions, auth docker.AuthConfiguration) error
|
||||
InspectImage(name string) (*docker.Image, error)
|
||||
InspectContainer(id string) (*docker.Container, error)
|
||||
StopContainer(id string, timeout uint) error
|
||||
Stats(opts docker.StatsOptions) error
|
||||
}
|
||||
|
||||
@@ -281,16 +280,6 @@ func (d *dockerWrap) InspectContainer(id string) (c *docker.Container, err error
|
||||
return c, err
|
||||
}
|
||||
|
||||
func (d *dockerWrap) StopContainer(id string, timeout uint) (err error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), retryTimeout)
|
||||
defer cancel()
|
||||
err = d.retry(ctx, func() error {
|
||||
err = d.docker.StopContainer(id, timeout)
|
||||
return err
|
||||
})
|
||||
return filterNotRunning(ctx, filterNoSuchContainer(ctx, err))
|
||||
}
|
||||
|
||||
func (d *dockerWrap) Stats(opts docker.StatsOptions) (err error) {
|
||||
// we can't retry this one this way since the callee closes the
|
||||
// stats chan, need a fancier retry mechanism where we can swap out
|
||||
|
||||
Reference in New Issue
Block a user