Skip to content

Commit

Permalink
Fix a corner case issue when daemon panics
Browse files Browse the repository at this point in the history
There is an extreme corner case where when the daemon
panics at the same time as a container is stopping
and cleaning up the sandbox and the sandbox may have been
left with an inconsistent state. This libnetwork vendoring
fixes that case.

Vendoring in libnetwork @ 5305ea570b85d61dd0fd261cd7e1680da1884678

Signed-off-by: Jana Radhakrishnan <[email protected]>
  • Loading branch information
mrjana committed Nov 3, 2015
1 parent 79d47c5 commit 79cffa5
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 10 deletions.
2 changes: 1 addition & 1 deletion hack/vendor.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ clone git github.com/vdemeester/shakers 3c10293ce22b900c27acad7b28656196fcc2f73b
clone git golang.org/x/net 3cffabab72adf04f8e3b01c5baf775361837b5fe https://github.com/golang/net.git

#get libnetwork packages
clone git github.com/docker/libnetwork e7719596c01a83f9ef24d33e9d609a64acacd7b8
clone git github.com/docker/libnetwork 5305ea570b85d61dd0fd261cd7e1680da1884678
clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
clone git github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b
clone git github.com/hashicorp/memberlist 9a1e242e454d2443df330bdd51a436d5a9058fc4
Expand Down
34 changes: 25 additions & 9 deletions vendor/src/github.com/docker/libnetwork/sandbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,13 +177,18 @@ func (sb *sandbox) Delete() error {
continue
}

if err := ep.Leave(sb); err != nil {
// Retain the sanbdox if we can't obtain the network from store.
if _, err := c.getNetworkFromStore(ep.getNetwork().ID()); err != nil {
retain = true
log.Warnf("Failed getting network for ep %s during sandbox %s delete: %v", ep.ID(), sb.ID(), err)
continue
}

if err := ep.Leave(sb); err != nil {
log.Warnf("Failed detaching sandbox %s from endpoint %s: %v\n", sb.ID(), ep.ID(), err)
}

if err := ep.Delete(); err != nil {
retain = true
log.Warnf("Failed deleting endpoint %s: %v\n", ep.ID(), err)
}
}
Expand Down Expand Up @@ -455,7 +460,7 @@ func (sb *sandbox) populateNetworkResources(ep *endpoint) error {
i := ep.iface
ep.Unlock()

if i.srcName != "" {
if i != nil && i.srcName != "" {
var ifaceOptions []osl.IfaceOption

ifaceOptions = append(ifaceOptions, sb.osSbox.InterfaceOptions().Address(i.addr), sb.osSbox.InterfaceOptions().Routes(i.routes))
Expand Down Expand Up @@ -951,6 +956,11 @@ func OptionGeneric(generic map[string]interface{}) SandboxOption {
func (eh epHeap) Len() int { return len(eh) }

func (eh epHeap) Less(i, j int) bool {
var (
cip, cjp int
ok bool
)

ci, _ := eh[i].getSandbox()
cj, _ := eh[j].getSandbox()

Expand All @@ -965,14 +975,20 @@ func (eh epHeap) Less(i, j int) bool {
return true
}

cip, ok := ci.epPriority[eh[i].ID()]
if !ok {
cip = 0
if ci != nil {
cip, ok = ci.epPriority[eh[i].ID()]
if !ok {
cip = 0
}
}
cjp, ok := cj.epPriority[eh[j].ID()]
if !ok {
cjp = 0

if cj != nil {
cjp, ok = cj.epPriority[eh[j].ID()]
if !ok {
cjp = 0
}
}

if cip == cjp {
return eh[i].network.Name() < eh[j].network.Name()
}
Expand Down

0 comments on commit 79cffa5

Please sign in to comment.