server: Make RemovePodSandbox idempotent

And in particular make it not fail when removing an already removed
sandbox pod. According to the CRI spec:

  [RemovePodSandbox] is idempotent, and must not return an error if
  the sandbox has already been removed.

We now only print a warning instead of returning an error.
We still return an error when the passed pod ID is empty.

Fixes #240

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
Samuel Ortiz 2016-12-07 17:38:36 +01:00
parent 8547c0dbd9
commit 365c291f1a
No known key found for this signature in database
GPG key ID: 8A803CDD4F566C4A
2 changed files with 13 additions and 2 deletions

View file

@ -1,6 +1,7 @@
package server
import (
"errors"
"fmt"
"github.com/docker/docker/pkg/stringid"
@ -26,6 +27,10 @@ const (
podDefaultNamespace = "default"
)
var (
errSandboxIDEmpty = errors.New("PodSandboxId should not be empty")
)
func (s *sandbox) addContainer(c *oci.Container) {
s.containers.Add(c.Name(), c)
}
@ -60,7 +65,7 @@ type podSandboxRequest interface {
func (s *Server) getPodSandboxFromRequest(req podSandboxRequest) (*sandbox, error) {
sbID := req.GetPodSandboxId()
if sbID == "" {
return nil, fmt.Errorf("PodSandboxId should not be empty")
return nil, errSandboxIDEmpty
}
sandboxID, err := s.podIDIndex.Get(sbID)

View file

@ -18,7 +18,13 @@ func (s *Server) RemovePodSandbox(ctx context.Context, req *pb.RemovePodSandboxR
logrus.Debugf("RemovePodSandboxRequest %+v", req)
sb, err := s.getPodSandboxFromRequest(req)
if err != nil {
return nil, err
if err == errSandboxIDEmpty {
return nil, err
}
resp := &pb.RemovePodSandboxResponse{}
logrus.Warnf("could not get sandbox %s, it's probably been removed already: %v", req.GetPodSandboxId(), err)
return resp, nil
}
podInfraContainer := sb.infraContainer