mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #35634 from fcrisciani/fix-net-not-found
Restore error type in FindNetwork
This commit is contained in:
commit
e0b3ddd437
5 changed files with 34 additions and 7 deletions
|
@ -183,7 +183,7 @@ func (r *controller) Start(ctx context.Context) error {
|
|||
|
||||
for {
|
||||
if err := r.adapter.start(ctx); err != nil {
|
||||
if _, ok := err.(libnetwork.ErrNoSuchNetwork); ok {
|
||||
if _, ok := errors.Cause(err).(libnetwork.ErrNoSuchNetwork); ok {
|
||||
// Retry network creation again if we
|
||||
// failed because some of the networks
|
||||
// were not found.
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"runtime"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/docker/api/errdefs"
|
||||
containertypes "github.com/docker/docker/api/types/container"
|
||||
"github.com/docker/docker/container"
|
||||
_ "github.com/docker/docker/pkg/discovery/memory"
|
||||
|
@ -17,6 +18,8 @@ import (
|
|||
"github.com/docker/docker/volume/local"
|
||||
"github.com/docker/docker/volume/store"
|
||||
"github.com/docker/go-connections/nat"
|
||||
"github.com/docker/libnetwork"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
@ -311,3 +314,12 @@ func TestValidateContainerIsolation(t *testing.T) {
|
|||
_, err := d.verifyContainerSettings(runtime.GOOS, &containertypes.HostConfig{Isolation: containertypes.Isolation("invalid")}, nil, false)
|
||||
assert.EqualError(t, err, "invalid isolation 'invalid' on "+runtime.GOOS)
|
||||
}
|
||||
|
||||
func TestFindNetworkErrorType(t *testing.T) {
|
||||
d := Daemon{}
|
||||
_, err := d.FindNetwork("fakeNet")
|
||||
_, ok := errors.Cause(err).(libnetwork.ErrNoSuchNetwork)
|
||||
if !errdefs.IsNotFound(err) || !ok {
|
||||
assert.Fail(t, "The FindNetwork method MUST always return an error that implements the NotFound interface and is ErrNoSuchNetwork")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,10 +21,6 @@ func volumeNotFound(id string) error {
|
|||
return objNotFoundError{"volume", id}
|
||||
}
|
||||
|
||||
func networkNotFound(id string) error {
|
||||
return objNotFoundError{"network", id}
|
||||
}
|
||||
|
||||
type objNotFoundError struct {
|
||||
object string
|
||||
id string
|
||||
|
@ -230,3 +226,20 @@ func translateContainerdStartErr(cmd string, setExitCode func(int), err error) e
|
|||
// TODO: it would be nice to get some better errors from containerd so we can return better errors here
|
||||
return retErr
|
||||
}
|
||||
|
||||
// TODO: cpuguy83 take care of it once the new library is ready
|
||||
type errNotFound struct{ error }
|
||||
|
||||
func (errNotFound) NotFound() {}
|
||||
|
||||
func (e errNotFound) Cause() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// notFound is a helper to create an error of the class with the same name from any error type
|
||||
func notFound(err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
return errNotFound{err}
|
||||
}
|
||||
|
|
|
@ -45,7 +45,9 @@ func (daemon *Daemon) FindNetwork(idName string) (libnetwork.Network, error) {
|
|||
// 3. match by ID prefix
|
||||
list := daemon.GetNetworksByIDPrefix(idName)
|
||||
if len(list) == 0 {
|
||||
return nil, errors.WithStack(networkNotFound(idName))
|
||||
// Be very careful to change the error type here, the libnetwork.ErrNoSuchNetwork error is used by the controller
|
||||
// to retry the creation of the network as managed through the swarm manager
|
||||
return nil, errors.WithStack(notFound(libnetwork.ErrNoSuchNetwork(idName)))
|
||||
}
|
||||
if len(list) > 1 {
|
||||
return nil, errors.WithStack(invalidIdentifier(idName))
|
||||
|
|
|
@ -49,7 +49,7 @@ func (s *DockerSuite) TestNetHostname(c *check.C) {
|
|||
c.Assert(out, checker.Contains, "Invalid network mode: invalid container format container:<name|id>")
|
||||
|
||||
out, _ = dockerCmdWithFail(c, "run", "--net=weird", "busybox", "ps")
|
||||
c.Assert(strings.ToLower(out), checker.Contains, "no such network")
|
||||
c.Assert(strings.ToLower(out), checker.Contains, "not found")
|
||||
}
|
||||
|
||||
func (s *DockerSuite) TestConflictContainerNetworkAndLinks(c *check.C) {
|
||||
|
|
Loading…
Reference in a new issue