1
0
Fork 0
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:
Jana Radhakrishnan 2015-10-16 16:11:55 -07:00
parent 2509014be8
commit afd6162240
2 changed files with 19 additions and 15 deletions

View file

@ -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)

View file

@ -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
} }