diff --git a/hack/vendor.sh b/hack/vendor.sh index 67a14310e..08a0f0e36 100755 --- a/hack/vendor.sh +++ b/hack/vendor.sh @@ -20,7 +20,7 @@ clone git github.com/tchap/go-patricia v2.1.0 clone git golang.org/x/net 3cffabab72adf04f8e3b01c5baf775361837b5fe https://github.com/golang/net.git #get libnetwork packages -clone git github.com/docker/libnetwork abc0807d72e309f53155ec4f6374a77fd6613849 +clone git github.com/docker/libnetwork 20351a84241aa1278493d74492db947336989be6 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/drivers/bridge/bridge.go b/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go index 05d08683c..6124ccb6c 100644 --- a/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go +++ b/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go @@ -338,16 +338,11 @@ func (c *networkConfiguration) conflictsWithNetworks(id string, others []*bridge } func (d *driver) configure(option map[string]interface{}) error { - var config *configuration - var err error - - err = d.initStore(option) - if err != nil { - return err - } - - d.Lock() - defer d.Unlock() + var ( + config *configuration + err error + natChain, filterChain *iptables.ChainInfo + ) genericData, ok := option[netlabel.GenericData] if !ok || genericData == nil { @@ -375,13 +370,23 @@ func (d *driver) configure(option map[string]interface{}) error { } if config.EnableIPTables { - d.natChain, d.filterChain, err = setupIPChains(config) + natChain, filterChain, err = setupIPChains(config) if err != nil { return err } } + d.Lock() + d.natChain = natChain + d.filterChain = filterChain d.config = config + d.Unlock() + + err = d.initStore(option) + if err != nil { + return err + } + return nil } diff --git a/vendor/src/github.com/docker/libnetwork/drivers/overlay/ov_serf.go b/vendor/src/github.com/docker/libnetwork/drivers/overlay/ov_serf.go index 894cb582c..a10bbf8e3 100644 --- a/vendor/src/github.com/docker/libnetwork/drivers/overlay/ov_serf.go +++ b/vendor/src/github.com/docker/libnetwork/drivers/overlay/ov_serf.go @@ -48,6 +48,7 @@ func (d *driver) serfInit() error { config.UserQuiescentPeriod = 50 * time.Millisecond config.LogOutput = &logWriter{} + config.MemberlistConfig.LogOutput = config.LogOutput s, err := serf.Create(config) if err != nil { diff --git a/vendor/src/github.com/docker/libnetwork/endpoint_info.go b/vendor/src/github.com/docker/libnetwork/endpoint_info.go index 3ca6b2b83..db23eb738 100644 --- a/vendor/src/github.com/docker/libnetwork/endpoint_info.go +++ b/vendor/src/github.com/docker/libnetwork/endpoint_info.go @@ -163,6 +163,17 @@ func (ep *endpoint) Info() EndpointInfo { } func (ep *endpoint) DriverInfo() (map[string]interface{}, error) { + ep, err := ep.retrieveFromStore() + if err != nil { + return nil, err + } + + if sb, ok := ep.getSandbox(); ok { + if gwep := sb.getEndpointInGWNetwork(); gwep != nil && gwep.ID() != ep.ID() { + return gwep.DriverInfo() + } + } + n, err := ep.getNetworkFromStore() if err != nil { return nil, fmt.Errorf("could not find network in store for driver info: %v", err) @@ -317,3 +328,11 @@ func (ep *endpoint) SetGatewayIPv6(gw6 net.IP) error { ep.joinInfo.gw6 = types.GetIPCopy(gw6) return nil } + +func (ep *endpoint) retrieveFromStore() (*endpoint, error) { + n, err := ep.getNetworkFromStore() + if err != nil { + return nil, fmt.Errorf("could not find network in store to get latest endpoint %s: %v", ep.Name(), err) + } + return n.getEndpointFromStore(ep.ID()) +} diff --git a/vendor/src/github.com/docker/libnetwork/store.go b/vendor/src/github.com/docker/libnetwork/store.go index 299e83ad6..1ea2f7ae8 100644 --- a/vendor/src/github.com/docker/libnetwork/store.go +++ b/vendor/src/github.com/docker/libnetwork/store.go @@ -265,6 +265,7 @@ func (c *controller) networkWatchLoop(nw *netWatch, ep *endpoint, ecCh <-chan da var addEp []*endpoint delEpMap := make(map[string]*endpoint) + renameEpMap := make(map[string]bool) for k, v := range nw.remoteEps { delEpMap[k] = v } @@ -285,10 +286,20 @@ func (c *controller) networkWatchLoop(nw *netWatch, ep *endpoint, ecCh <-chan da delete(delEpMap, lEp.ID()) continue } + renameEpMap[lEp.ID()] = true } nw.remoteEps[lEp.ID()] = lEp addEp = append(addEp, lEp) } + + // EPs whose name are to be deleted from the svc records + // should also be removed from nw's remote EP list, except + // the ones that are getting renamed. + for _, lEp := range delEpMap { + if !renameEpMap[lEp.ID()] { + delete(nw.remoteEps, lEp.ID()) + } + } c.Unlock() for _, lEp := range delEpMap {