From 4e4ba9dd3a1d488cf9d808f35904ce59911a55de Mon Sep 17 00:00:00 2001 From: Alessandro Boch Date: Thu, 14 Jan 2016 10:34:00 -0800 Subject: [PATCH] Vendoring libnetwork v0.5.5 Signed-off-by: Alessandro Boch --- hack/vendor.sh | 2 +- .../github.com/docker/libnetwork/.gitignore | 2 + .../github.com/docker/libnetwork/CHANGELOG.md | 5 ++ .../docker/libnetwork/bitseq/sequence.go | 53 +++++++++++++++++++ .../libnetwork/drivers/bridge/bridge.go | 3 +- .../docker/libnetwork/ipam/allocator.go | 22 ++++++++ .../github.com/docker/libnetwork/network.go | 12 ++--- 7 files changed, 91 insertions(+), 8 deletions(-) diff --git a/hack/vendor.sh b/hack/vendor.sh index a74d55133a..b05c9b0ac7 100755 --- a/hack/vendor.sh +++ b/hack/vendor.sh @@ -26,7 +26,7 @@ clone git github.com/docker/engine-api v0.2.2 clone git github.com/RackSec/srslog 6eb773f331e46fbba8eecb8e794e635e75fc04de #get libnetwork packages -clone git github.com/docker/libnetwork v0.5.4 +clone git github.com/docker/libnetwork v0.5.5 clone git github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec clone git github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b clone git github.com/hashicorp/memberlist 9a1e242e454d2443df330bdd51a436d5a9058fc4 diff --git a/vendor/src/github.com/docker/libnetwork/.gitignore b/vendor/src/github.com/docker/libnetwork/.gitignore index 08e11d78e2..f9cd104fec 100644 --- a/vendor/src/github.com/docker/libnetwork/.gitignore +++ b/vendor/src/github.com/docker/libnetwork/.gitignore @@ -8,6 +8,8 @@ bin/ integration-tmp/ _obj _test +.vagrant + # Architecture specific extensions/prefixes *.[568vq] diff --git a/vendor/src/github.com/docker/libnetwork/CHANGELOG.md b/vendor/src/github.com/docker/libnetwork/CHANGELOG.md index dc21f351f3..98e3913327 100644 --- a/vendor/src/github.com/docker/libnetwork/CHANGELOG.md +++ b/vendor/src/github.com/docker/libnetwork/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.5.5 (2016-01-14) +- Allow network-scoped alias to be resolved for anonymous endpoint +- Self repair corrupted IP database that could happen in 1.9.0 & 1.9.1 +- Skip IPTables cleanup if --iptables=false is set. Fixes docker/docker#19063 + ## 0.5.4 (2016-01-12) - Removed the isNodeAlive protection when user forces an endpoint delete diff --git a/vendor/src/github.com/docker/libnetwork/bitseq/sequence.go b/vendor/src/github.com/docker/libnetwork/bitseq/sequence.go index a537ed0107..270a36aa63 100644 --- a/vendor/src/github.com/docker/libnetwork/bitseq/sequence.go +++ b/vendor/src/github.com/docker/libnetwork/bitseq/sequence.go @@ -9,6 +9,7 @@ import ( "fmt" "sync" + log "github.com/Sirupsen/logrus" "github.com/docker/libnetwork/datastore" "github.com/docker/libnetwork/types" ) @@ -243,6 +244,58 @@ func (h *Handle) IsSet(ordinal uint64) bool { return err != nil } +func (h *Handle) runConsistencyCheck() bool { + corrupted := false + for p, c := h.head, h.head.next; c != nil; c = c.next { + if c.count == 0 { + corrupted = true + p.next = c.next + continue // keep same p + } + p = c + } + return corrupted +} + +// CheckConsistency checks if the bit sequence is in an inconsistent state and attempts to fix it. +// It looks for a corruption signature that may happen in docker 1.9.0 and 1.9.1. +func (h *Handle) CheckConsistency() error { + for { + h.Lock() + store := h.store + h.Unlock() + + if store != nil { + if err := store.GetObject(datastore.Key(h.Key()...), h); err != nil && err != datastore.ErrKeyNotFound { + return err + } + } + + h.Lock() + nh := h.getCopy() + h.Unlock() + + if !nh.runConsistencyCheck() { + return nil + } + + if err := nh.writeToStore(); err != nil { + if _, ok := err.(types.RetryError); !ok { + return fmt.Errorf("internal failure while fixing inconsistent bitsequence: %v", err) + } + continue + } + + log.Infof("Fixed inconsistent bit sequence in datastore:\n%s\n%s", h, nh) + + h.Lock() + h.head = nh.head + h.Unlock() + + return nil + } +} + // set/reset the bit func (h *Handle) set(ordinal, start, end uint64, any bool, release bool) (uint64, error) { var ( diff --git a/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go b/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go index 7b2bdebd20..2bb4350e9d 100644 --- a/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go +++ b/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go @@ -135,7 +135,7 @@ func Init(dc driverapi.DriverCallback, config map[string]interface{}) error { if err := iptables.FirewalldInit(); err != nil { logrus.Debugf("Fail to initialize firewalld: %v, using raw iptables instead", err) } - removeIPChains() + d := newDriver() if err := d.configure(config); err != nil { return err @@ -378,6 +378,7 @@ func (d *driver) configure(option map[string]interface{}) error { } if config.EnableIPTables { + removeIPChains() natChain, filterChain, isolationChain, err = setupIPChains(config) if err != nil { return err diff --git a/vendor/src/github.com/docker/libnetwork/ipam/allocator.go b/vendor/src/github.com/docker/libnetwork/ipam/allocator.go index be8b4ac029..ce404e2ad2 100644 --- a/vendor/src/github.com/docker/libnetwork/ipam/allocator.go +++ b/vendor/src/github.com/docker/libnetwork/ipam/allocator.go @@ -70,6 +70,9 @@ func NewAllocator(lcDs, glDs datastore.DataStore) (*Allocator, error) { } } + a.checkConsistency(localAddressSpace) + a.checkConsistency(globalAddressSpace) + return a, nil } @@ -115,6 +118,25 @@ func (a *Allocator) updateBitMasks(aSpace *addrSpace) error { return nil } +// Checks for and fixes damaged bitmask. Meant to be called in constructor only. +func (a *Allocator) checkConsistency(as string) { + // Retrieve this address space's configuration and bitmasks from the datastore + a.refresh(as) + aSpace, ok := a.addrSpaces[as] + if !ok { + return + } + a.updateBitMasks(aSpace) + for sk, pd := range aSpace.subnets { + if pd.Range != nil { + continue + } + if err := a.addresses[sk].CheckConsistency(); err != nil { + log.Warnf("Error while running consistency check for %s: %v", sk, err) + } + } +} + // GetDefaultAddressSpaces returns the local and global default address spaces func (a *Allocator) GetDefaultAddressSpaces() (string, string, error) { return localAddressSpace, globalAddressSpace, nil diff --git a/vendor/src/github.com/docker/libnetwork/network.go b/vendor/src/github.com/docker/libnetwork/network.go index e582767c18..7449c90ac4 100644 --- a/vendor/src/github.com/docker/libnetwork/network.go +++ b/vendor/src/github.com/docker/libnetwork/network.go @@ -822,20 +822,20 @@ func (n *network) EndpointByID(id string) (Endpoint, error) { } func (n *network) updateSvcRecord(ep *endpoint, localEps []*endpoint, isAdd bool) { - if ep.isAnonymous() { - return - } - epName := ep.Name() if iface := ep.Iface(); iface.Address() != nil { myAliases := ep.MyAliases() if isAdd { - n.addSvcRecords(epName, iface.Address().IP, true) + if !ep.isAnonymous() { + n.addSvcRecords(epName, iface.Address().IP, true) + } for _, alias := range myAliases { n.addSvcRecords(alias, iface.Address().IP, false) } } else { - n.deleteSvcRecords(epName, iface.Address().IP, true) + if !ep.isAnonymous() { + n.deleteSvcRecords(epName, iface.Address().IP, true) + } for _, alias := range myAliases { n.deleteSvcRecords(alias, iface.Address().IP, false) }