From bf7ef3fd7b0619fa275375e80df16575698a8046 Mon Sep 17 00:00:00 2001 From: Jana Radhakrishnan Date: Thu, 1 Sep 2016 14:27:36 -0700 Subject: [PATCH] Do not hold sandbox if not in distributed control When the libnetwork controller is not in distributed control mode avoid retaining stale sandboxes when the network cannot be retrieved from store. This ratining logic is only applicable for an independent k/v store which manages libnetwork state. In such case the k/v store may be temporarily unavailable so there is a need to retain the sandbox so that the resource cleanup happens properly. Signed-off-by: Jana Radhakrishnan --- libnetwork/sandbox.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libnetwork/sandbox.go b/libnetwork/sandbox.go index 52e9bb6783..775b92ab31 100644 --- a/libnetwork/sandbox.go +++ b/libnetwork/sandbox.go @@ -202,12 +202,14 @@ func (sb *sandbox) delete(force bool) error { retain := false for _, ep := range sb.getConnectedEndpoints() { // gw network endpoint detach and removal are automatic - if ep.endpointInGWNetwork() { + if ep.endpointInGWNetwork() && !force { continue } // Retain the sanbdox if we can't obtain the network from store. if _, err := c.getNetworkFromStore(ep.getNetwork().ID()); err != nil { - retain = true + if c.isDistributedControl() { + retain = true + } log.Warnf("Failed getting network for ep %s during sandbox %s delete: %v", ep.ID(), sb.ID(), err) continue }