Removing Windows servicing containers
Signed-off-by: Darren Stahl <darst@microsoft.com>
This commit is contained in:
parent
002cabade8
commit
243467aa96
@ -23,7 +23,6 @@ import (
|
|||||||
"github.com/containerd/typeurl"
|
"github.com/containerd/typeurl"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -147,22 +146,10 @@ func (r *windowsRuntime) Delete(ctx context.Context, t runtime.Task) (*runtime.E
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
needServicing bool
|
|
||||||
state, _ = wt.State(ctx)
|
state, _ = wt.State(ctx)
|
||||||
)
|
)
|
||||||
switch state.Status {
|
switch state.Status {
|
||||||
case runtime.StoppedStatus:
|
case runtime.StoppedStatus:
|
||||||
// Only try to service a container if it was started and it's not a
|
|
||||||
// servicing task itself
|
|
||||||
if wt.servicing == false {
|
|
||||||
needServicing, err = wt.hcsContainer.HasPendingUpdates()
|
|
||||||
if err != nil {
|
|
||||||
needServicing = false
|
|
||||||
log.G(ctx).WithError(err).
|
|
||||||
WithFields(logrus.Fields{"id": wt.id, "pid": wt.pid}).
|
|
||||||
Error("failed to check if container needs servicing")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fallthrough
|
fallthrough
|
||||||
case runtime.CreatedStatus:
|
case runtime.CreatedStatus:
|
||||||
// if it's stopped or in created state, we need to shutdown the
|
// if it's stopped or in created state, we need to shutdown the
|
||||||
@ -206,13 +193,6 @@ func (r *windowsRuntime) Delete(ctx context.Context, t runtime.Task) (*runtime.E
|
|||||||
ExitedAt: rtExit.Timestamp,
|
ExitedAt: rtExit.Timestamp,
|
||||||
})
|
})
|
||||||
|
|
||||||
if needServicing {
|
|
||||||
ns, _ := namespaces.Namespace(ctx)
|
|
||||||
serviceCtx := log.WithLogger(context.Background(), log.GetLogger(ctx))
|
|
||||||
serviceCtx = namespaces.WithNamespace(serviceCtx, ns)
|
|
||||||
r.serviceTask(serviceCtx, ns, wt.id+"_servicing", wt.rootfs, wt.spec)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := mount.UnmountAll(wt.rootfs[0].Source, 0); err != nil {
|
if err := mount.UnmountAll(wt.rootfs[0].Source, 0); err != nil {
|
||||||
log.G(ctx).WithError(err).WithField("path", wt.rootfs[0].Source).
|
log.G(ctx).WithError(err).WithField("path", wt.rootfs[0].Source).
|
||||||
Warn("failed to unmount rootfs on failure")
|
Warn("failed to unmount rootfs on failure")
|
||||||
@ -357,36 +337,3 @@ func (r *windowsRuntime) cleanup(ctx context.Context) {
|
|||||||
container.Close()
|
container.Close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *windowsRuntime) serviceTask(ctx context.Context, namespace, id string, rootfs []mount.Mount, spec *specs.Spec) {
|
|
||||||
var (
|
|
||||||
err error
|
|
||||||
t *task
|
|
||||||
io runtime.IO
|
|
||||||
createOpts = &hcsshimtypes.CreateOptions{
|
|
||||||
TerminateDuration: defaultTerminateDuration,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
t, err = r.newTask(ctx, namespace, id, rootfs, spec, io, createOpts)
|
|
||||||
if err != nil {
|
|
||||||
log.G(ctx).WithError(err).WithField("id", id).
|
|
||||||
Warn("failed to created servicing task")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
t.servicing = true
|
|
||||||
|
|
||||||
err = t.Start(ctx)
|
|
||||||
switch err {
|
|
||||||
case nil:
|
|
||||||
<-t.getProcess(id).exitCh
|
|
||||||
default:
|
|
||||||
log.G(ctx).WithError(err).WithField("id", id).
|
|
||||||
Warn("failed to start servicing task")
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err = r.Delete(ctx, t); err != nil {
|
|
||||||
log.G(ctx).WithError(err).WithField("id", id).
|
|
||||||
Warn("failed to stop servicing task")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -39,7 +39,6 @@ type task struct {
|
|||||||
pidPool *pidPool
|
pidPool *pidPool
|
||||||
hcsContainer hcsshim.Container
|
hcsContainer hcsshim.Container
|
||||||
terminateDuration time.Duration
|
terminateDuration time.Duration
|
||||||
servicing bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *task) ID() string {
|
func (t *task) ID() string {
|
||||||
|
Loading…
Reference in New Issue
Block a user