mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Bridge driver should return maskable error
Bridge driver should return maskable error during Leave or DeleteEndpoint since this can be an expected sceanrio when libnetwork tries to leave and delete default bridge endpoints and bridge driver does not persist with the default bridge. This is only expected during an ungraceful exit of the daemon but will cause confusion to the user if it shows up as failures on a deamon restart after an ungraceful exit. Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
This commit is contained in:
parent
2509014be8
commit
afd6162240
2 changed files with 19 additions and 15 deletions
|
@ -989,7 +989,7 @@ func (d *driver) DeleteEndpoint(nid, eid string) error {
|
||||||
d.Unlock()
|
d.Unlock()
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return types.NotFoundErrorf("network %s does not exist", nid)
|
return types.InternalMaskableErrorf("network %s does not exist", nid)
|
||||||
}
|
}
|
||||||
if n == nil {
|
if n == nil {
|
||||||
return driverapi.ErrNoNetwork(nid)
|
return driverapi.ErrNoNetwork(nid)
|
||||||
|
@ -1145,7 +1145,7 @@ func (d *driver) Leave(nid, eid string) error {
|
||||||
|
|
||||||
network, err := d.getNetwork(nid)
|
network, err := d.getNetwork(nid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return types.InternalMaskableErrorf("%s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint, err := network.getEndpoint(eid)
|
endpoint, err := network.getEndpoint(eid)
|
||||||
|
|
|
@ -425,28 +425,32 @@ func (ep *endpoint) sbLeave(sbox Sandbox, options ...EndpointOption) error {
|
||||||
|
|
||||||
ep.processOptions(options...)
|
ep.processOptions(options...)
|
||||||
|
|
||||||
ep.Lock()
|
|
||||||
ep.sandboxID = ""
|
|
||||||
ep.network = n
|
|
||||||
ep.Unlock()
|
|
||||||
|
|
||||||
if err := n.getController().updateToStore(ep); err != nil {
|
|
||||||
ep.Lock()
|
|
||||||
ep.sandboxID = sid
|
|
||||||
ep.Unlock()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
d, err := n.driver()
|
d, err := n.driver()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to leave endpoint: %v", err)
|
return fmt.Errorf("failed to leave endpoint: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ep.Lock()
|
||||||
|
ep.sandboxID = ""
|
||||||
|
ep.network = n
|
||||||
|
ep.Unlock()
|
||||||
|
|
||||||
if err := d.Leave(n.id, ep.id); err != nil {
|
if err := d.Leave(n.id, ep.id); err != nil {
|
||||||
return err
|
if _, ok := err.(types.MaskableError); !ok {
|
||||||
|
log.Warnf("driver error disconnecting container %s : %v", ep.name, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := sb.clearNetworkResources(ep); err != nil {
|
if err := sb.clearNetworkResources(ep); err != nil {
|
||||||
|
log.Warnf("Could not cleanup network resources on container %s disconnect: %v", ep.name, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the store about the sandbox detach only after we
|
||||||
|
// have completed sb.clearNetworkresources above to avoid
|
||||||
|
// spurious logs when cleaning up the sandbox when the daemon
|
||||||
|
// ungracefully exits and restarts before completing sandbox
|
||||||
|
// detach but after store has been updated.
|
||||||
|
if err := n.getController().updateToStore(ep); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue