From 6c3e266eb96db36503a604467c09b7c73094e8d0 Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Mon, 12 Nov 2018 13:32:55 -0800 Subject: [PATCH] sandbox: Export Start() to the API level In order to support use cases such as containerd-shim-v2 where we would have a long running process holding the sandbox pointer, there would be no reason to call into the stateless function StartSandbox(), which would recreate a new sandbox pointer and the corresponding ones for containers. Fixes #903 Signed-off-by: Sebastien Boeuf --- virtcontainers/api.go | 2 +- virtcontainers/interfaces.go | 1 + virtcontainers/pkg/vcmock/sandbox.go | 5 +++++ virtcontainers/sandbox.go | 4 ++-- virtcontainers/sandbox_test.go | 14 +++++++------- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/virtcontainers/api.go b/virtcontainers/api.go index a89847b67f..039dc2e0c8 100644 --- a/virtcontainers/api.go +++ b/virtcontainers/api.go @@ -232,7 +232,7 @@ func StartSandbox(ctx context.Context, sandboxID string) (VCSandbox, error) { func startSandbox(s *Sandbox) (*Sandbox, error) { // Start it - err := s.start() + err := s.Start() if err != nil { return nil, err } diff --git a/virtcontainers/interfaces.go b/virtcontainers/interfaces.go index 1731fb4a85..083d23a14a 100644 --- a/virtcontainers/interfaces.go +++ b/virtcontainers/interfaces.go @@ -66,6 +66,7 @@ type VCSandbox interface { ID() string SetAnnotations(annotations map[string]string) error + Start() error Pause() error Resume() error Release() error diff --git a/virtcontainers/pkg/vcmock/sandbox.go b/virtcontainers/pkg/vcmock/sandbox.go index 9fac78a076..2350207219 100644 --- a/virtcontainers/pkg/vcmock/sandbox.go +++ b/virtcontainers/pkg/vcmock/sandbox.go @@ -67,6 +67,11 @@ func (s *Sandbox) Release() error { return nil } +// Start implements the VCSandbox function of the same name. +func (s *Sandbox) Start() error { + return nil +} + // Pause implements the VCSandbox function of the same name. func (s *Sandbox) Pause() error { return nil diff --git a/virtcontainers/sandbox.go b/virtcontainers/sandbox.go index 3d723e0042..2899418955 100644 --- a/virtcontainers/sandbox.go +++ b/virtcontainers/sandbox.go @@ -1442,9 +1442,9 @@ func (s *Sandbox) createContainers() error { return nil } -// start starts a sandbox. The containers that are making the sandbox +// Start starts a sandbox. The containers that are making the sandbox // will be started. -func (s *Sandbox) start() error { +func (s *Sandbox) Start() error { if err := s.state.validTransition(s.state.State, StateRunning); err != nil { return err } diff --git a/virtcontainers/sandbox_test.go b/virtcontainers/sandbox_test.go index 8cda6303ea..88b31de395 100644 --- a/virtcontainers/sandbox_test.go +++ b/virtcontainers/sandbox_test.go @@ -1345,7 +1345,7 @@ func TestStartContainer(t *testing.T) { _, err = s.StartContainer(contID) assert.NotNil(t, err, "Starting non-existing container should fail") - err = s.start() + err = s.Start() assert.Nil(t, err, "Failed to start sandbox: %v", err) contConfig := newTestContainerConfigNoop(contID) @@ -1401,7 +1401,7 @@ func TestEnterContainer(t *testing.T) { _, _, err = s.EnterContainer(contID, cmd) assert.NotNil(t, err, "Entering non-running container should fail") - err = s.start() + err = s.Start() assert.Nil(t, err, "Failed to start sandbox: %v", err) _, _, err = s.EnterContainer(contID, cmd) @@ -1416,7 +1416,7 @@ func TestMonitor(t *testing.T) { _, err = s.Monitor() assert.NotNil(t, err, "Monitoring non-running container should fail") - err = s.start() + err = s.Start() assert.Nil(t, err, "Failed to start sandbox: %v", err) _, err = s.Monitor() @@ -1438,7 +1438,7 @@ func TestWaitProcess(t *testing.T) { _, err = s.WaitProcess(contID, execID) assert.NotNil(t, err, "Wait process in stopped sandbox should fail") - err = s.start() + err = s.Start() assert.Nil(t, err, "Failed to start sandbox: %v", err) _, err = s.WaitProcess(contID, execID) @@ -1468,7 +1468,7 @@ func TestSignalProcess(t *testing.T) { err = s.SignalProcess(contID, execID, syscall.SIGKILL, true) assert.NotNil(t, err, "Wait process in stopped sandbox should fail") - err = s.start() + err = s.Start() assert.Nil(t, err, "Failed to start sandbox: %v", err) err = s.SignalProcess(contID, execID, syscall.SIGKILL, false) @@ -1498,7 +1498,7 @@ func TestWinsizeProcess(t *testing.T) { err = s.WinsizeProcess(contID, execID, 100, 200) assert.NotNil(t, err, "Winsize process in stopped sandbox should fail") - err = s.start() + err = s.Start() assert.Nil(t, err, "Failed to start sandbox: %v", err) err = s.WinsizeProcess(contID, execID, 100, 200) @@ -1528,7 +1528,7 @@ func TestContainerProcessIOStream(t *testing.T) { _, _, _, err = s.IOStream(contID, execID) assert.NotNil(t, err, "Winsize process in stopped sandbox should fail") - err = s.start() + err = s.Start() assert.Nil(t, err, "Failed to start sandbox: %v", err) _, _, _, err = s.IOStream(contID, execID)