From b3ac56e3d28ede224cb4005b12c5f32f3599b9b8 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Tue, 25 Apr 2017 15:21:07 +0000 Subject: [PATCH 1/3] Update mesh library and check for errors newly returned --- prog/weaver/main.go | 11 ++++++++--- router/network_router.go | 10 +++++++--- vendor/github.com/weaveworks/mesh | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/prog/weaver/main.go b/prog/weaver/main.go index f2666188..97e7c3fa 100644 --- a/prog/weaver/main.go +++ b/prog/weaver/main.go @@ -254,7 +254,8 @@ func main() { checkFatal(err) defer db.Close() - router := weave.NewNetworkRouter(config, networkConfig, name, nickName, overlay, db) + router, err := weave.NewNetworkRouter(config, networkConfig, name, nickName, overlay, db) + checkFatal(err) Log.Println("Our name is", router.Ourself) if peers, err = router.InitialPeers(resume, peers); err != nil { @@ -476,7 +477,9 @@ func createAllocator(router *weave.NetworkRouter, config ipamConfig, preClaims [ allocator := ipam.NewAllocator(c) - allocator.SetInterfaces(router.NewGossip("IPallocation", allocator)) + gossip, err := router.NewGossip("IPallocation", allocator) + checkFatal(err) + allocator.SetInterfaces(gossip) allocator.Start() router.Peers.OnGC(func(peer *mesh.Peer) { allocator.PeerGone(peer.Name) }) @@ -486,7 +489,9 @@ func createAllocator(router *weave.NetworkRouter, config ipamConfig, preClaims [ func createDNSServer(config dnsConfig, router *mesh.Router, isKnownPeer func(mesh.PeerName) bool) (*nameserver.Nameserver, *nameserver.DNSServer) { ns := nameserver.New(router.Ourself.Peer.Name, config.Domain, isKnownPeer) router.Peers.OnGC(func(peer *mesh.Peer) { ns.PeerGone(peer.Name) }) - ns.SetGossip(router.NewGossip("nameserver", ns)) + gossip, err := router.NewGossip("nameserver", ns) + checkFatal(err) + ns.SetGossip(gossip) upstream := nameserver.NewUpstream(config.ResolvConf, config.EffectiveListenAddress) dnsserver, err := nameserver.NewDNSServer(ns, config.Domain, config.ListenAddress, upstream, uint32(config.TTL), config.ClientTimeout) diff --git a/router/network_router.go b/router/network_router.go index a7c83dba..36582c2b 100644 --- a/router/network_router.go +++ b/router/network_router.go @@ -51,7 +51,7 @@ type NetworkRouter struct { db db.DB } -func NewNetworkRouter(config mesh.Config, networkConfig NetworkConfig, name mesh.PeerName, nickName string, overlay NetworkOverlay, db db.DB) *NetworkRouter { +func NewNetworkRouter(config mesh.Config, networkConfig NetworkConfig, name mesh.PeerName, nickName string, overlay NetworkOverlay, db db.DB) (*NetworkRouter, error) { if overlay == nil { overlay = NullNetworkOverlay{} } @@ -59,7 +59,11 @@ func NewNetworkRouter(config mesh.Config, networkConfig NetworkConfig, name mesh networkConfig.Bridge = NullBridge{} } - router := &NetworkRouter{Router: mesh.NewRouter(config, name, nickName, overlay, common.LogLogger()), NetworkConfig: networkConfig, db: db} + meshRouter, err := mesh.NewRouter(config, name, nickName, overlay, common.LogLogger()) + if err != nil { + return nil, err + } + router := &NetworkRouter{Router: meshRouter, NetworkConfig: networkConfig, db: db} router.Peers.OnInvalidateShortIDs(overlay.InvalidateShortIDs) router.Routes.OnChange(overlay.InvalidateRoutes) router.Macs = NewMacCache(macMaxAge, @@ -67,7 +71,7 @@ func NewNetworkRouter(config mesh.Config, networkConfig NetworkConfig, name mesh log.Println("Expired MAC", mac, "at", peer) }) router.Peers.OnGC(func(peer *mesh.Peer) { router.Macs.Delete(peer) }) - return router + return router, nil } // Start listening for TCP connections, locally captured packets, and diff --git a/vendor/github.com/weaveworks/mesh b/vendor/github.com/weaveworks/mesh index 5015f896..9a382455 160000 --- a/vendor/github.com/weaveworks/mesh +++ b/vendor/github.com/weaveworks/mesh @@ -1 +1 @@ -Subproject commit 5015f896ab62d3e9fe757456c757521ce0c3faff +Subproject commit 9a3824558758fb39a0e34f9aa6baa179fba8e3bc From b19f2df6f813ed1626fda754e6eb666294f5fc36 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 3 May 2017 14:35:20 +0000 Subject: [PATCH 2/3] Improve hairpin log messages --- prog/weaver/main.go | 3 ++- router/fastdp.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/prog/weaver/main.go b/prog/weaver/main.go index f2666188..e605edda 100644 --- a/prog/weaver/main.go +++ b/prog/weaver/main.go @@ -231,7 +231,8 @@ func main() { if bridge != nil { if err := weavenet.DetectHairpin("vethwe-bridge", Log); err != nil { - Log.Errorf("DetectHairpin failed: %s", err) + Log.Errorf("Setting may cause connectivity issues : %s", err) + Log.Infof("Hairpin mode may have been enabled by other software on this machine") } } diff --git a/router/fastdp.go b/router/fastdp.go index 78785413..c5ffe13d 100644 --- a/router/fastdp.go +++ b/router/fastdp.go @@ -1224,7 +1224,7 @@ func (fastdp *FastDatapath) send(fops FlowOp, frame []byte, lock *fastDatapathLo } if fastdp.isHairpinFlow(&flow) { - log.Error("Vetoed installation of hairpin flow ", flow) + log.Warning("Vetoed installation of hairpin flow ", flow) return } From 7c8f33f5259828076d94691ff407b3a538723aa8 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 3 May 2017 09:51:11 +0000 Subject: [PATCH 3/3] Add checkpoint flag per connection type --- prog/weaver/checkpoint.go | 21 +++++++++++++++++---- prog/weaver/main.go | 6 +----- vendor/github.com/weaveworks/go-checkpoint | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/prog/weaver/checkpoint.go b/prog/weaver/checkpoint.go index 17453210..2c26315d 100644 --- a/prog/weaver/checkpoint.go +++ b/prog/weaver/checkpoint.go @@ -6,6 +6,7 @@ import ( "time" "github.com/weaveworks/go-checkpoint" + weave "github.com/weaveworks/weave/router" ) var checker *checkpoint.Checker @@ -16,7 +17,7 @@ const ( updateCheckPeriod = 6 * time.Hour ) -func checkForUpdates(dockerVersion string, network string) { +func checkForUpdates(dockerVersion string, router *weave.NetworkRouter) { newVersion.Store("") success.Store(true) @@ -51,9 +52,6 @@ func checkForUpdates(dockerVersion string, network string) { "docker-version": dockerVersion, "kernel-version": kernelVersion, } - if network != "" { - flags["network"] = network - } // Start background version checking params := checkpoint.CheckParams{ @@ -61,6 +59,21 @@ func checkForUpdates(dockerVersion string, network string) { Version: version, SignatureFile: "", Flags: flags, + ExtraFlags: func() []checkpoint.Flag { return checkpointFlags(router) }, } checker = checkpoint.CheckInterval(¶ms, updateCheckPeriod, handleResponse) } + +func checkpointFlags(router *weave.NetworkRouter) []checkpoint.Flag { + flags := []checkpoint.Flag{} + status := weave.NewNetworkRouterStatus(router) + for _, conn := range status.Connections { + if connectionName, ok := conn.Attrs["name"].(string); ok { + if _, encrypted := conn.Attrs["encrypted"]; encrypted { + connectionName = connectionName + " encrypted" + } + flags = append(flags, checkpoint.Flag{Key: "network", Value: connectionName}) + } + } + return flags +} diff --git a/prog/weaver/main.go b/prog/weaver/main.go index 97e7c3fa..ccefcfcb 100644 --- a/prog/weaver/main.go +++ b/prog/weaver/main.go @@ -275,11 +275,7 @@ func main() { dockerVersion = dockerCli.DockerVersion() } - network := "" - if isAWSVPC { - network = "awsvpc" - } - checkForUpdates(dockerVersion, network) + checkForUpdates(dockerVersion, router) observeContainers := func(o docker.ContainerObserver) { if dockerCli != nil { diff --git a/vendor/github.com/weaveworks/go-checkpoint b/vendor/github.com/weaveworks/go-checkpoint index 62324982..ebbb8b05 160000 --- a/vendor/github.com/weaveworks/go-checkpoint +++ b/vendor/github.com/weaveworks/go-checkpoint @@ -1 +1 @@ -Subproject commit 62324982ab514860761ec81e618664580513ffad +Subproject commit ebbb8b0518ab326368631225cabc9435fe580dcc