From 01906eef9932fe6a32fb12978929e157f1615b36 Mon Sep 17 00:00:00 2001 From: flyflypeng Date: Wed, 20 Jun 2018 07:51:05 +0800 Subject: [PATCH] virtcontainers: add qemu process rollback If some errors occur after qemu process start, then we need to rollback to kill qemu process Fixes: #297 Signed-off-by: flyflypeng --- virtcontainers/api.go | 21 +++++++++++++++++++++ virtcontainers/sandbox.go | 10 ++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/virtcontainers/api.go b/virtcontainers/api.go index dfaf0c881a..bcb271f4dc 100644 --- a/virtcontainers/api.go +++ b/virtcontainers/api.go @@ -55,6 +55,27 @@ func createSandboxFromConfig(sandboxConfig SandboxConfig) (*Sandbox, error) { return nil, err } + // rollback to stop VM if error occurs + defer func() { + if err != nil { + s.stopVM() + } + }() + + // Once startVM is done, we want to guarantee + // that the sandbox is manageable. For that we need + // to start the sandbox inside the VM. + if err = s.agent.startSandbox(s); err != nil { + return nil, err + } + + // rollback to stop sandbox in VM + defer func() { + if err != nil { + s.agent.stopSandbox(s) + } + }() + // Create Containers if err := s.createContainers(); err != nil { return nil, err diff --git a/virtcontainers/sandbox.go b/virtcontainers/sandbox.go index 9422599821..90af285a38 100644 --- a/virtcontainers/sandbox.go +++ b/virtcontainers/sandbox.go @@ -949,10 +949,12 @@ func (s *Sandbox) startVM() error { s.Logger().Info("VM started") - // Once startVM is done, we want to guarantee - // that the sandbox is manageable. For that we need - // to start the sandbox inside the VM. - return s.agent.startSandbox(s) + return nil +} + +// stopVM: stop the sandbox's VM +func (s *Sandbox) stopVM() error { + return s.hypervisor.stopSandbox() } func (s *Sandbox) addContainer(c *Container) error {