mirror of
https://github.com/aljazceru/kata-containers.git
synced 2026-01-03 22:44:24 +01:00
Kubelet would cleanup the pod cgroup resources and kill the processes in the pod cgroups when it detected all of the containers in a pod exited, thus shimv2 should close the hypervisor process once the podsandbox container exited, otherwise, the hypervisor process would be killed by kubelet and made shimv2 failed to shutdown the sandbox. Fixes:#1672 Signed-off-by: lifupan <lifupan@gmail.com>
65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
// Copyright (c) 2018 HyperHQ Inc.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package containerdshim
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/containerd/containerd/api/types/task"
|
|
"github.com/containerd/containerd/errdefs"
|
|
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
|
|
|
vc "github.com/kata-containers/runtime/virtcontainers"
|
|
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
|
)
|
|
|
|
type container struct {
|
|
s *service
|
|
ttyio *ttyIO
|
|
spec *oci.CompatOCISpec
|
|
exitTime time.Time
|
|
execs map[string]*exec
|
|
exitIOch chan struct{}
|
|
exitCh chan uint32
|
|
id string
|
|
stdin string
|
|
stdout string
|
|
stderr string
|
|
bundle string
|
|
cType vc.ContainerType
|
|
exit uint32
|
|
status task.Status
|
|
terminal bool
|
|
}
|
|
|
|
func newContainer(s *service, r *taskAPI.CreateTaskRequest, containerType vc.ContainerType, spec *oci.CompatOCISpec) (*container, error) {
|
|
if r == nil {
|
|
return nil, errdefs.ToGRPCf(errdefs.ErrInvalidArgument, " CreateTaskRequest points to nil")
|
|
}
|
|
|
|
// in order to avoid deferencing a nil pointer in test
|
|
if spec == nil {
|
|
spec = &oci.CompatOCISpec{}
|
|
}
|
|
|
|
c := &container{
|
|
s: s,
|
|
spec: spec,
|
|
id: r.ID,
|
|
bundle: r.Bundle,
|
|
stdin: r.Stdin,
|
|
stdout: r.Stdout,
|
|
stderr: r.Stderr,
|
|
terminal: r.Terminal,
|
|
cType: containerType,
|
|
execs: make(map[string]*exec),
|
|
status: task.StatusCreated,
|
|
exitIOch: make(chan struct{}),
|
|
exitCh: make(chan uint32, 1),
|
|
}
|
|
return c, nil
|
|
}
|