mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-26 15:32:30 +00:00
virtiofs: stop sandbox when virtiofsd quits
Commit89e0dfae11
("qemu: stop qemu process when virtiofsd quits") stops sandbox when virtiofsd quits so that virtiofs mount inside guest won't hang. But commitd5a3d0a61c
("virtiofs: use virtiofsd --fd=FDNUM") deleted this monitor logic. Add the Scanner back to monitor virtiofsd's stderr and stop sandbox if Scanner returns error. Note that we don't monitor the virtiofsd process itself is because virtiofsd may be live-upgraded (when available) and the original process may quit, but virtiofs service is still running. Fixes: #2315 Signed-off-by: Eryu Guan <eguan@linux.alibaba.com>
This commit is contained in:
parent
62cd08044d
commit
abbb536cc4
@ -655,12 +655,28 @@ func (q *qemu) setupVirtiofsd() (err error) {
|
|||||||
const sockFd = 3 // Cmd.ExtraFiles[] fds are numbered starting from 3
|
const sockFd = 3 // Cmd.ExtraFiles[] fds are numbered starting from 3
|
||||||
cmd := exec.Command(q.config.VirtioFSDaemon, q.virtiofsdArgs(sockFd)...)
|
cmd := exec.Command(q.config.VirtioFSDaemon, q.virtiofsdArgs(sockFd)...)
|
||||||
cmd.ExtraFiles = append(cmd.ExtraFiles, fd)
|
cmd.ExtraFiles = append(cmd.ExtraFiles, fd)
|
||||||
|
stderr, err := cmd.StderrPipe()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
err = cmd.Start()
|
err = cmd.Start()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
q.state.VirtiofsdPid = cmd.Process.Pid
|
q.state.VirtiofsdPid = cmd.Process.Pid
|
||||||
}
|
}
|
||||||
fd.Close()
|
fd.Close()
|
||||||
|
|
||||||
|
// Monitor virtiofsd's stderr and stop sandbox if virtiofsd quits
|
||||||
|
go func() {
|
||||||
|
scanner := bufio.NewScanner(stderr)
|
||||||
|
for scanner.Scan() {
|
||||||
|
q.Logger().WithField("source", "virtiofsd").Info(scanner.Text())
|
||||||
|
}
|
||||||
|
q.Logger().Info("virtiofsd quits")
|
||||||
|
// Wait to release resources of virtiofsd process
|
||||||
|
cmd.Process.Wait()
|
||||||
|
q.stopSandbox()
|
||||||
|
}()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user