Merge pull request #44888 from corhere/fix-kata-exec-exit
Fix exit-event handling for Kata runtime
This commit is contained in:
commit
0de32693d0
4 changed files with 9 additions and 12 deletions
|
@ -156,7 +156,7 @@ func (daemon *Daemon) ProcessEvent(id string, e libcontainerdtypes.EventType, ei
|
||||||
|
|
||||||
daemon.LogContainerEvent(c, "oom")
|
daemon.LogContainerEvent(c, "oom")
|
||||||
case libcontainerdtypes.EventExit:
|
case libcontainerdtypes.EventExit:
|
||||||
if int(ei.Pid) == c.Pid {
|
if ei.ProcessID == ei.ContainerID {
|
||||||
return daemon.handleContainerExit(c, &ei)
|
return daemon.handleContainerExit(c, &ei)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -461,7 +461,7 @@ func (ctr *container) Start(_ context.Context, _ string, withStdin bool, attachS
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
t := &task{process: process{
|
t := &task{process: process{
|
||||||
id: libcontainerdtypes.InitProcessName,
|
id: ctr.id,
|
||||||
ctr: ctr,
|
ctr: ctr,
|
||||||
hcsProcess: newProcess,
|
hcsProcess: newProcess,
|
||||||
waitCh: make(chan struct{}),
|
waitCh: make(chan struct{}),
|
||||||
|
@ -495,7 +495,7 @@ func (ctr *container) Start(_ context.Context, _ string, withStdin bool, attachS
|
||||||
ctr.client.eventQ.Append(ctr.id, func() {
|
ctr.client.eventQ.Append(ctr.id, func() {
|
||||||
ei := libcontainerdtypes.EventInfo{
|
ei := libcontainerdtypes.EventInfo{
|
||||||
ContainerID: ctr.id,
|
ContainerID: ctr.id,
|
||||||
ProcessID: libcontainerdtypes.InitProcessName,
|
ProcessID: t.id,
|
||||||
Pid: pid,
|
Pid: pid,
|
||||||
}
|
}
|
||||||
ctr.client.logger.WithFields(logrus.Fields{
|
ctr.client.logger.WithFields(logrus.Fields{
|
||||||
|
@ -793,7 +793,7 @@ func (t *task) Pause(_ context.Context) error {
|
||||||
t.ctr.client.eventQ.Append(t.ctr.id, func() {
|
t.ctr.client.eventQ.Append(t.ctr.id, func() {
|
||||||
err := t.ctr.client.backend.ProcessEvent(t.ctr.id, libcontainerdtypes.EventPaused, libcontainerdtypes.EventInfo{
|
err := t.ctr.client.backend.ProcessEvent(t.ctr.id, libcontainerdtypes.EventPaused, libcontainerdtypes.EventInfo{
|
||||||
ContainerID: t.ctr.id,
|
ContainerID: t.ctr.id,
|
||||||
ProcessID: libcontainerdtypes.InitProcessName,
|
ProcessID: t.id,
|
||||||
})
|
})
|
||||||
t.ctr.client.logger.WithFields(logrus.Fields{
|
t.ctr.client.logger.WithFields(logrus.Fields{
|
||||||
"container": t.ctr.id,
|
"container": t.ctr.id,
|
||||||
|
@ -834,7 +834,7 @@ func (t *task) Resume(ctx context.Context) error {
|
||||||
t.ctr.client.eventQ.Append(t.ctr.id, func() {
|
t.ctr.client.eventQ.Append(t.ctr.id, func() {
|
||||||
err := t.ctr.client.backend.ProcessEvent(t.ctr.id, libcontainerdtypes.EventResumed, libcontainerdtypes.EventInfo{
|
err := t.ctr.client.backend.ProcessEvent(t.ctr.id, libcontainerdtypes.EventResumed, libcontainerdtypes.EventInfo{
|
||||||
ContainerID: t.ctr.id,
|
ContainerID: t.ctr.id,
|
||||||
ProcessID: libcontainerdtypes.InitProcessName,
|
ProcessID: t.id,
|
||||||
})
|
})
|
||||||
t.ctr.client.logger.WithFields(logrus.Fields{
|
t.ctr.client.logger.WithFields(logrus.Fields{
|
||||||
"container": t.ctr.id,
|
"container": t.ctr.id,
|
||||||
|
|
|
@ -213,9 +213,9 @@ func (c *container) Start(ctx context.Context, checkpointDir string, withStdin b
|
||||||
|
|
||||||
t, err = c.c8dCtr.NewTask(ctx,
|
t, err = c.c8dCtr.NewTask(ctx,
|
||||||
func(id string) (cio.IO, error) {
|
func(id string) (cio.IO, error) {
|
||||||
fifos := newFIFOSet(bundle, libcontainerdtypes.InitProcessName, withStdin, spec.Process.Terminal)
|
fifos := newFIFOSet(bundle, id, withStdin, spec.Process.Terminal)
|
||||||
|
|
||||||
rio, err = c.createIO(fifos, libcontainerdtypes.InitProcessName, stdinCloseSync, attachStdio)
|
rio, err = c.createIO(fifos, stdinCloseSync, attachStdio)
|
||||||
return rio, err
|
return rio, err
|
||||||
},
|
},
|
||||||
taskOpts...,
|
taskOpts...,
|
||||||
|
@ -278,7 +278,7 @@ func (t *task) Exec(ctx context.Context, processID string, spec *specs.Process,
|
||||||
}()
|
}()
|
||||||
|
|
||||||
p, err = t.Task.Exec(ctx, processID, spec, func(id string) (cio.IO, error) {
|
p, err = t.Task.Exec(ctx, processID, spec, func(id string) (cio.IO, error) {
|
||||||
rio, err = t.ctr.createIO(fifos, processID, stdinCloseSync, attachStdio)
|
rio, err = t.ctr.createIO(fifos, stdinCloseSync, attachStdio)
|
||||||
return rio, err
|
return rio, err
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -489,7 +489,7 @@ func (c *container) Task(ctx context.Context) (libcontainerdtypes.Task, error) {
|
||||||
|
|
||||||
// createIO creates the io to be used by a process
|
// createIO creates the io to be used by a process
|
||||||
// This needs to get a pointer to interface as upon closure the process may not have yet been registered
|
// This needs to get a pointer to interface as upon closure the process may not have yet been registered
|
||||||
func (c *container) createIO(fifos *cio.FIFOSet, processID string, stdinCloseSync chan containerd.Process, attachStdio libcontainerdtypes.StdioCallback) (cio.IO, error) {
|
func (c *container) createIO(fifos *cio.FIFOSet, stdinCloseSync chan containerd.Process, attachStdio libcontainerdtypes.StdioCallback) (cio.IO, error) {
|
||||||
var (
|
var (
|
||||||
io *cio.DirectIO
|
io *cio.DirectIO
|
||||||
err error
|
err error
|
||||||
|
|
|
@ -99,6 +99,3 @@ type Task interface {
|
||||||
|
|
||||||
// StdioCallback is called to connect a container or process stdio.
|
// StdioCallback is called to connect a container or process stdio.
|
||||||
type StdioCallback func(io *cio.DirectIO) (cio.IO, error)
|
type StdioCallback func(io *cio.DirectIO) (cio.IO, error)
|
||||||
|
|
||||||
// InitProcessName is the name given to the first process of a container
|
|
||||||
const InitProcessName = "init"
|
|
||||||
|
|
Loading…
Reference in a new issue