From 7103c4f14a14433634306284e4e7f0017959a71e 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 ddbb16801d..3fabd70da1 100644 --- a/virtcontainers/api.go +++ b/virtcontainers/api.go @@ -64,6 +64,27 @@ func createSandboxFromConfig(sandboxConfig SandboxConfig, factory Factory) (*San 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 316dbd72cc..efd5d1d6ad 100644 --- a/virtcontainers/sandbox.go +++ b/virtcontainers/sandbox.go @@ -971,10 +971,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 {