From cdb04519e238d658825f6db8437b389d7dfd88f2 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Wed, 15 Jun 2016 15:07:04 -0700 Subject: [PATCH] Update libnetwork to 96d45528599c32354230480a1ebc0 This fixes an issue with hanging tests due to store. Fixes #23560 Signed-off-by: Michael Crosby (cherry picked from commit e927df7b4b58099113b5086371b1d80ff517f564) --- hack/vendor.sh | 2 +- .../docker/libnetwork/controller.go | 2 ++ .../libnetwork/drivers/overlay/encryption.go | 30 +++++++++---------- .../github.com/docker/libnetwork/endpoint.go | 4 +-- .../github.com/docker/libnetwork/network.go | 11 ++++--- .../src/github.com/docker/libnetwork/store.go | 9 ++++++ 6 files changed, 36 insertions(+), 22 deletions(-) diff --git a/hack/vendor.sh b/hack/vendor.sh index 6f393d2f82..3366ef3a65 100755 --- a/hack/vendor.sh +++ b/hack/vendor.sh @@ -65,7 +65,7 @@ clone git github.com/RackSec/srslog 259aed10dfa74ea2961eddd1d9847619f6e98837 clone git github.com/imdario/mergo 0.2.1 #get libnetwork packages -clone git github.com/docker/libnetwork 0d517a9e4e5cbdb889b3257eebd2351addcd46d4 +clone git github.com/docker/libnetwork 96d45528599c32354230480a1ebc0657cd4d077f clone git github.com/docker/go-events 39718a26497694185f8fb58a7d6f31947f3dc42d clone git github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80 clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec diff --git a/vendor/src/github.com/docker/libnetwork/controller.go b/vendor/src/github.com/docker/libnetwork/controller.go index 3655707bf6..b19f51d707 100644 --- a/vendor/src/github.com/docker/libnetwork/controller.go +++ b/vendor/src/github.com/docker/libnetwork/controller.go @@ -203,6 +203,8 @@ func New(cfgOptions ...config.Option) (NetworkController, error) { } } + c.WalkNetworks(populateSpecial) + // Reserve pools first before doing cleanup. Otherwise the // cleanups of endpoint/network and sandbox below will // generate many unnecessary warnings diff --git a/vendor/src/github.com/docker/libnetwork/drivers/overlay/encryption.go b/vendor/src/github.com/docker/libnetwork/drivers/overlay/encryption.go index 0f9a5e4767..f27f86004d 100644 --- a/vendor/src/github.com/docker/libnetwork/drivers/overlay/encryption.go +++ b/vendor/src/github.com/docker/libnetwork/drivers/overlay/encryption.go @@ -70,7 +70,7 @@ func (e *encrMap) String() string { } func (d *driver) checkEncryption(nid string, rIP net.IP, vxlanID uint32, isLocal, add bool) error { - log.Infof("checkEncryption(%s, %v, %d, %t)", nid[0:7], rIP, vxlanID, isLocal) + log.Debugf("checkEncryption(%s, %v, %d, %t)", nid[0:7], rIP, vxlanID, isLocal) n := d.network(nid) if n == nil || !n.secure { @@ -120,7 +120,7 @@ func (d *driver) checkEncryption(nid string, rIP net.IP, vxlanID uint32, isLocal } func setupEncryption(localIP, remoteIP net.IP, vni uint32, em *encrMap, keys []*key) error { - log.Infof("Programming encryption for vxlan %d between %s and %s", vni, localIP, remoteIP) + log.Debugf("Programming encryption for vxlan %d between %s and %s", vni, localIP, remoteIP) rIPs := remoteIP.String() indices := make([]*spi, 0, len(keys)) @@ -242,7 +242,7 @@ func programSA(localIP, remoteIP net.IP, spi *spi, k *key, dir int, add bool) (f } if add != exists { - log.Infof("%s: rSA{%s}", action, rSA) + log.Debugf("%s: rSA{%s}", action, rSA) if err := xfrmProgram(rSA); err != nil { log.Warnf("Failed %s rSA{%s}: %v", action, rSA, err) } @@ -267,7 +267,7 @@ func programSA(localIP, remoteIP net.IP, spi *spi, k *key, dir int, add bool) (f } if add != exists { - log.Infof("%s fSA{%s}", action, fSA) + log.Debugf("%s fSA{%s}", action, fSA) if err := xfrmProgram(fSA); err != nil { log.Warnf("Failed %s fSA{%s}: %v.", action, fSA, err) } @@ -313,7 +313,7 @@ func programSP(fSA *netlink.XfrmState, rSA *netlink.XfrmState, add bool) error { } if add != exists { - log.Infof("%s fSP{%s}", action, fPol) + log.Debugf("%s fSP{%s}", action, fPol) if err := xfrmProgram(fPol); err != nil { log.Warnf("%s fSP{%s}: %v", action, fPol, err) } @@ -380,16 +380,16 @@ func (d *driver) setKeys(keys []*key) error { return types.ForbiddenErrorf("initial keys are already present") } d.keys = keys - log.Infof("Initial encryption keys: %v", d.keys) + log.Debugf("Initial encryption keys: %v", d.keys) return nil } // updateKeys allows to add a new key and/or change the primary key and/or prune an existing key // The primary key is the key used in transmission and will go in first position in the list. func (d *driver) updateKeys(newKey, primary, pruneKey *key) error { - log.Infof("Updating Keys. New: %v, Primary: %v, Pruned: %v", newKey, primary, pruneKey) + log.Debugf("Updating Keys. New: %v, Primary: %v, Pruned: %v", newKey, primary, pruneKey) - log.Infof("Current: %v", d.keys) + log.Debugf("Current: %v", d.keys) var ( newIdx = -1 @@ -444,7 +444,7 @@ func (d *driver) updateKeys(newKey, primary, pruneKey *key) error { } d.Unlock() - log.Infof("Updated: %v", d.keys) + log.Debugf("Updated: %v", d.keys) return nil } @@ -458,10 +458,10 @@ func (d *driver) updateKeys(newKey, primary, pruneKey *key) error { // Spis and keys are sorted in such away the one in position 0 is the primary func updateNodeKey(lIP, rIP net.IP, idxs []*spi, curKeys []*key, newIdx, priIdx, delIdx int) []*spi { - log.Infof("Updating keys for node: %s (%d,%d,%d)", rIP, newIdx, priIdx, delIdx) + log.Debugf("Updating keys for node: %s (%d,%d,%d)", rIP, newIdx, priIdx, delIdx) spis := idxs - log.Infof("Current: %v", spis) + log.Debugf("Current: %v", spis) // add new if newIdx != -1 { @@ -482,7 +482,7 @@ func updateNodeKey(lIP, rIP net.IP, idxs []*spi, curKeys []*key, newIdx, priIdx, Crypt: &netlink.XfrmStateAlgo{Name: "cbc(aes)", Key: curKeys[delIdx].value}, Limits: netlink.XfrmStateLimits{TimeSoft: timeout}, } - log.Infof("Updating rSA0{%s}", rSA0) + log.Debugf("Updating rSA0{%s}", rSA0) if err := ns.NlHandle().XfrmStateUpdate(rSA0); err != nil { log.Warnf("Failed to update rSA0{%s}: %v", rSA0, err) } @@ -518,7 +518,7 @@ func updateNodeKey(lIP, rIP net.IP, idxs []*spi, curKeys []*key, newIdx, priIdx, }, }, } - log.Infof("Updating fSP{%s}", fSP1) + log.Debugf("Updating fSP{%s}", fSP1) if err := ns.NlHandle().XfrmPolicyUpdate(fSP1); err != nil { log.Warnf("Failed to update fSP{%s}: %v", fSP1, err) } @@ -533,7 +533,7 @@ func updateNodeKey(lIP, rIP net.IP, idxs []*spi, curKeys []*key, newIdx, priIdx, Crypt: &netlink.XfrmStateAlgo{Name: "cbc(aes)", Key: curKeys[0].value}, Limits: netlink.XfrmStateLimits{TimeHard: timeout}, } - log.Infof("Removing fSA0{%s}", fSA0) + log.Debugf("Removing fSA0{%s}", fSA0) if err := ns.NlHandle().XfrmStateUpdate(fSA0); err != nil { log.Warnf("Failed to remove fSA0{%s}: %v", fSA0, err) } @@ -553,7 +553,7 @@ func updateNodeKey(lIP, rIP net.IP, idxs []*spi, curKeys []*key, newIdx, priIdx, spis = append(spis[:delIdx], spis[delIdx+1:]...) } - log.Infof("Updated: %v", spis) + log.Debugf("Updated: %v", spis) return spis } diff --git a/vendor/src/github.com/docker/libnetwork/endpoint.go b/vendor/src/github.com/docker/libnetwork/endpoint.go index 1c9bf8291c..3fa1b6dc3e 100644 --- a/vendor/src/github.com/docker/libnetwork/endpoint.go +++ b/vendor/src/github.com/docker/libnetwork/endpoint.go @@ -987,7 +987,7 @@ func (ep *endpoint) assignAddress(ipam ipamapi.Ipam, assignIPv4, assignIPv6 bool var err error n := ep.getNetwork() - if n.Type() == "host" || n.Type() == "null" { + if n.hasSpecialDriver() { return nil } @@ -1067,7 +1067,7 @@ func (ep *endpoint) assignAddressVersion(ipVer int, ipam ipamapi.Ipam) error { func (ep *endpoint) releaseAddress() { n := ep.getNetwork() - if n.Type() == "host" || n.Type() == "null" { + if n.hasSpecialDriver() { return } diff --git a/vendor/src/github.com/docker/libnetwork/network.go b/vendor/src/github.com/docker/libnetwork/network.go index c4e988fadd..1bf003ebf3 100644 --- a/vendor/src/github.com/docker/libnetwork/network.go +++ b/vendor/src/github.com/docker/libnetwork/network.go @@ -1123,8 +1123,7 @@ func (n *network) getController() *controller { } func (n *network) ipamAllocate() error { - // For now also exclude bridge from using new ipam - if n.Type() == "host" || n.Type() == "null" { + if n.hasSpecialDriver() { return nil } @@ -1295,8 +1294,7 @@ func (n *network) ipamAllocateVersion(ipVer int, ipam ipamapi.Ipam) error { } func (n *network) ipamRelease() { - // For now exclude host and null - if n.Type() == "host" || n.Type() == "null" { + if n.hasSpecialDriver() { return } ipam, _, err := n.getController().getIPAMDriver(n.ipamType) @@ -1504,3 +1502,8 @@ func (n *network) TableEventRegister(tableName string) error { n.driverTables = append(n.driverTables, tableName) return nil } + +// Special drivers are ones which do not need to perform any network plumbing +func (n *network) hasSpecialDriver() bool { + return n.Type() == "host" || n.Type() == "null" +} diff --git a/vendor/src/github.com/docker/libnetwork/store.go b/vendor/src/github.com/docker/libnetwork/store.go index 714d56bd5a..b622836498 100644 --- a/vendor/src/github.com/docker/libnetwork/store.go +++ b/vendor/src/github.com/docker/libnetwork/store.go @@ -464,3 +464,12 @@ func (c *controller) networkCleanup() { } } } + +var populateSpecial NetworkWalker = func(nw Network) bool { + if n := nw.(*network); n.hasSpecialDriver() { + if err := n.getController().addNetwork(n); err != nil { + log.Warnf("Failed to populate network %q with driver %q", nw.Name(), nw.Type()) + } + } + return false +}