From dbd2c592dfa0d8a0af9d3de8644f76ecff972792 Mon Sep 17 00:00:00 2001 From: Alessandro Boch Date: Tue, 25 Apr 2017 11:19:51 -0700 Subject: [PATCH] [17.05.x] Vendoring libnetwork @5d4e5de Signed-off-by: Alessandro Boch --- vendor.conf | 2 +- vendor/github.com/docker/libnetwork/agent.go | 7 ++++++ .../docker/libnetwork/default_gateway.go | 13 ++++++++++- .../github.com/docker/libnetwork/endpoint.go | 22 +++++++++---------- .../docker/libnetwork/networkdb/broadcast.go | 9 ++++++++ .../docker/libnetwork/networkdb/cluster.go | 2 +- 6 files changed, 41 insertions(+), 14 deletions(-) diff --git a/vendor.conf b/vendor.conf index 293656428b..e2d6d66840 100644 --- a/vendor.conf +++ b/vendor.conf @@ -24,7 +24,7 @@ github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5 github.com/imdario/mergo 0.2.1 #get libnetwork packages -github.com/docker/libnetwork b13e0604016a4944025aaff521d9c125850b0d04 +github.com/docker/libnetwork 5d4e5de2f9962c2de8a7872128e2cc09dfdd99aa github.com/docker/go-events 18b43f1bc85d9cdd42c05a6cd2d444c7a200a894 github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80 github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec diff --git a/vendor/github.com/docker/libnetwork/agent.go b/vendor/github.com/docker/libnetwork/agent.go index ff1869055f..923c3af1e8 100644 --- a/vendor/github.com/docker/libnetwork/agent.go +++ b/vendor/github.com/docker/libnetwork/agent.go @@ -187,6 +187,13 @@ func (c *controller) agentSetup() error { clusterProvider := c.cfg.Daemon.ClusterProvider agent := c.agent c.Unlock() + + if clusterProvider == nil { + msg := "Aborting initialization of Libnetwork Agent because cluster provider is now unset" + logrus.Errorf(msg) + return fmt.Errorf(msg) + } + bindAddr := clusterProvider.GetLocalAddress() advAddr := clusterProvider.GetAdvertiseAddress() remote := clusterProvider.GetRemoteAddress() diff --git a/vendor/github.com/docker/libnetwork/default_gateway.go b/vendor/github.com/docker/libnetwork/default_gateway.go index b042539b88..bf1592435f 100644 --- a/vendor/github.com/docker/libnetwork/default_gateway.go +++ b/vendor/github.com/docker/libnetwork/default_gateway.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + "github.com/Sirupsen/logrus" "github.com/docker/libnetwork/netlabel" "github.com/docker/libnetwork/types" ) @@ -72,9 +73,19 @@ func (sb *sandbox) setupDefaultGW() error { if err != nil { return fmt.Errorf("container %s: endpoint create on GW Network failed: %v", sb.containerID, err) } + + defer func() { + if err != nil { + if err2 := newEp.Delete(true); err2 != nil { + logrus.Warnf("Failed to remove gw endpoint for container %s after failing to join the gateway network: %v", + sb.containerID, err2) + } + } + }() + epLocal := newEp.(*endpoint) - if err := epLocal.sbJoin(sb); err != nil { + if err = epLocal.sbJoin(sb); err != nil { return fmt.Errorf("container %s: endpoint join on GW Network failed: %v", sb.containerID, err) } diff --git a/vendor/github.com/docker/libnetwork/endpoint.go b/vendor/github.com/docker/libnetwork/endpoint.go index de63cf34e8..8e70c38d76 100644 --- a/vendor/github.com/docker/libnetwork/endpoint.go +++ b/vendor/github.com/docker/libnetwork/endpoint.go @@ -427,7 +427,7 @@ func (ep *endpoint) Join(sbox Sandbox, options ...EndpointOption) error { return ep.sbJoin(sb, options...) } -func (ep *endpoint) sbJoin(sb *sandbox, options ...EndpointOption) error { +func (ep *endpoint) sbJoin(sb *sandbox, options ...EndpointOption) (err error) { n, err := ep.getNetworkFromStore() if err != nil { return fmt.Errorf("failed to get network from store during join: %v", err) @@ -462,7 +462,7 @@ func (ep *endpoint) sbJoin(sb *sandbox, options ...EndpointOption) error { d, err := n.driver(true) if err != nil { - return fmt.Errorf("failed to join endpoint: %v", err) + return fmt.Errorf("failed to get driver during join: %v", err) } err = d.Join(nid, epid, sb.Key(), ep, sb.Labels()) @@ -471,8 +471,8 @@ func (ep *endpoint) sbJoin(sb *sandbox, options ...EndpointOption) error { } defer func() { if err != nil { - if err := d.Leave(nid, epid); err != nil { - logrus.Warnf("driver leave failed while rolling back join: %v", err) + if e := d.Leave(nid, epid); e != nil { + logrus.Warnf("driver leave failed while rolling back join: %v", e) } } }() @@ -538,11 +538,11 @@ func (ep *endpoint) sbJoin(sb *sandbox, options ...EndpointOption) error { logrus.Debugf("Revoking external connectivity on endpoint %s (%s)", extEp.Name(), extEp.ID()) extN, err := extEp.getNetworkFromStore() if err != nil { - return fmt.Errorf("failed to get network from store during join: %v", err) + return fmt.Errorf("failed to get network from store for revoking external connectivity during join: %v", err) } extD, err := extN.driver(true) if err != nil { - return fmt.Errorf("failed to join endpoint: %v", err) + return fmt.Errorf("failed to get driver for revoking external connectivity during join: %v", err) } if err = extD.RevokeExternalConnectivity(extEp.network.ID(), extEp.ID()); err != nil { return types.InternalErrorf( @@ -570,9 +570,9 @@ func (ep *endpoint) sbJoin(sb *sandbox, options ...EndpointOption) error { } if !sb.needDefaultGW() { - if err := sb.clearDefaultGW(); err != nil { + if e := sb.clearDefaultGW(); e != nil { logrus.Warnf("Failure while disconnecting sandbox %s (%s) from gateway network: %v", - sb.ID(), sb.ContainerID(), err) + sb.ID(), sb.ContainerID(), e) } } @@ -705,7 +705,7 @@ func (ep *endpoint) sbLeave(sb *sandbox, force bool, options ...EndpointOption) d, err := n.driver(!force) if err != nil { - return fmt.Errorf("failed to leave endpoint: %v", err) + return fmt.Errorf("failed to get driver during endpoint leave: %v", err) } ep.Lock() @@ -765,11 +765,11 @@ func (ep *endpoint) sbLeave(sb *sandbox, force bool, options ...EndpointOption) logrus.Debugf("Programming external connectivity on endpoint %s (%s)", extEp.Name(), extEp.ID()) extN, err := extEp.getNetworkFromStore() if err != nil { - return fmt.Errorf("failed to get network from store during leave: %v", err) + return fmt.Errorf("failed to get network from store for programming external connectivity during leave: %v", err) } extD, err := extN.driver(true) if err != nil { - return fmt.Errorf("failed to leave endpoint: %v", err) + return fmt.Errorf("failed to get driver for programming external connectivity during leave: %v", err) } if err := extD.ProgramExternalConnectivity(extEp.network.ID(), extEp.ID(), sb.Labels()); err != nil { logrus.Warnf("driver failed programming external connectivity on endpoint %s: (%s) %v", diff --git a/vendor/github.com/docker/libnetwork/networkdb/broadcast.go b/vendor/github.com/docker/libnetwork/networkdb/broadcast.go index 5555634179..3fe9f6271a 100644 --- a/vendor/github.com/docker/libnetwork/networkdb/broadcast.go +++ b/vendor/github.com/docker/libnetwork/networkdb/broadcast.go @@ -86,6 +86,15 @@ func (nDB *NetworkDB) sendNodeEvent(event NodeEvent_Type) error { notify: notifyCh, }) + nDB.RLock() + noPeers := len(nDB.nodes) <= 1 + nDB.RUnlock() + + // Message enqueued, do not wait for a send if no peer is present + if noPeers { + return nil + } + // Wait for the broadcast select { case <-notifyCh: diff --git a/vendor/github.com/docker/libnetwork/networkdb/cluster.go b/vendor/github.com/docker/libnetwork/networkdb/cluster.go index 62d05c0aea..54c392c5a4 100644 --- a/vendor/github.com/docker/libnetwork/networkdb/cluster.go +++ b/vendor/github.com/docker/libnetwork/networkdb/cluster.go @@ -17,7 +17,7 @@ import ( ) const ( - reapInterval = 60 * time.Second + reapInterval = 30 * time.Minute reapPeriod = 5 * time.Second retryInterval = 1 * time.Second nodeReapInterval = 24 * time.Hour