Merge pull request #27466 from mrjana/net
Retry AttachNetwork when it fails to find network
This commit is contained in:
commit
9a61bd05f8
1 changed files with 40 additions and 15 deletions
|
@ -357,26 +357,51 @@ func (daemon *Daemon) findAndAttachNetwork(container *container.Container, idOrN
|
|||
}
|
||||
}
|
||||
|
||||
// In all other cases, attempt to attach to the network to
|
||||
// trigger attachment in the swarm cluster manager.
|
||||
var config *networktypes.NetworkingConfig
|
||||
if daemon.clusterProvider != nil {
|
||||
var err error
|
||||
config, err = daemon.clusterProvider.AttachNetwork(idOrName, container.ID, addresses)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
var (
|
||||
config *networktypes.NetworkingConfig
|
||||
retryCount int
|
||||
)
|
||||
|
||||
n, err = daemon.FindNetwork(idOrName)
|
||||
if err != nil {
|
||||
for {
|
||||
// In all other cases, attempt to attach to the network to
|
||||
// trigger attachment in the swarm cluster manager.
|
||||
if daemon.clusterProvider != nil {
|
||||
if err := daemon.clusterProvider.DetachNetwork(idOrName, container.ID); err != nil {
|
||||
logrus.Warnf("Could not rollback attachment for container %s to network %s: %v", container.ID, idOrName, err)
|
||||
var err error
|
||||
config, err = daemon.clusterProvider.AttachNetwork(idOrName, container.ID, addresses)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return nil, nil, err
|
||||
n, err = daemon.FindNetwork(idOrName)
|
||||
if err != nil {
|
||||
if daemon.clusterProvider != nil {
|
||||
if err := daemon.clusterProvider.DetachNetwork(idOrName, container.ID); err != nil {
|
||||
logrus.Warnf("Could not rollback attachment for container %s to network %s: %v", container.ID, idOrName, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Retry network attach again if we failed to
|
||||
// find the network after successfull
|
||||
// attachment because the only reason that
|
||||
// would happen is if some other container
|
||||
// attached to the swarm scope network went down
|
||||
// and removed the network while we were in
|
||||
// the process of attaching.
|
||||
if config != nil {
|
||||
if _, ok := err.(libnetwork.ErrNoSuchNetwork); ok {
|
||||
if retryCount >= 5 {
|
||||
return nil, nil, fmt.Errorf("could not find network %s after successful attachment", idOrName)
|
||||
}
|
||||
retryCount++
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
// This container has attachment to a swarm scope
|
||||
|
|
Loading…
Reference in a new issue