Persist set of peers to connect to

This commit is contained in:
Bryan Boreham committed 2016-02-17 18:12:16 +00:00
1 parent 09cd9e091a
commit ba8926a6ea
4 files changed
+28 -5

No files matched your search

+2 -2
View File
@@ -166,7 +166,7 @@ func main() {
checkFatal(err)
defer db.Close()
router := weave.NewNetworkRouter(config, networkConfig, name, nickName, overlay)
router := weave.NewNetworkRouter(config, networkConfig, name, nickName, overlay, db)
Log.Println("Our name is", router.Ourself)
var dockerCli *docker.Client
@@ -215,7 +215,7 @@ func main() {
}
router.Start()
if errors := router.ConnectionMaker.InitiateConnections(peers, false); len(errors) > 0 {
if errors := router.SetInitialPeers(peers); len(errors) > 0 {
Log.Fatal(ErrorMessages(errors))
}
+2
View File
@@ -17,6 +17,7 @@ func (router *NetworkRouter) HandleHTTP(muxRouter *mux.Router) {
if errors := router.ConnectionMaker.InitiateConnections(r.Form["peer"], r.FormValue("replace") == "true"); len(errors) > 0 {
http.Error(w, common.ErrorMessages(errors), http.StatusBadRequest)
}
router.persistPeers()
})
muxRouter.Methods("POST").Path("/forget").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
@@ -24,6 +25,7 @@ func (router *NetworkRouter) HandleHTTP(muxRouter *mux.Router) {
http.Error(w, fmt.Sprint("unable to parse form: ", err), http.StatusBadRequest)
}
router.ConnectionMaker.ForgetConnections(r.Form["peer"])
router.persistPeers()
})
}
+23 -2
View File
@@ -8,6 +8,7 @@ import (
"github.com/weaveworks/mesh"
"github.com/weaveworks/weave/common"
"github.com/weaveworks/weave/db"
)
const (
@@ -45,9 +46,10 @@ type NetworkRouter struct {
*mesh.Router
NetworkConfig
Macs *MacCache
db db.DB
}
func NewNetworkRouter(config mesh.Config, networkConfig NetworkConfig, name mesh.PeerName, nickName string, overlay NetworkOverlay) *NetworkRouter {
func NewNetworkRouter(config mesh.Config, networkConfig NetworkConfig, name mesh.PeerName, nickName string, overlay NetworkOverlay, db db.DB) *NetworkRouter {
if overlay == nil {
overlay = NullNetworkOverlay{}
}
@@ -55,7 +57,7 @@ func NewNetworkRouter(config mesh.Config, networkConfig NetworkConfig, name mesh
networkConfig.Bridge = NullBridge{}
}
router := &NetworkRouter{Router: mesh.NewRouter(config, name, nickName, overlay), NetworkConfig: networkConfig}
router := &NetworkRouter{Router: mesh.NewRouter(config, name, nickName, overlay), NetworkConfig: networkConfig, db: db}
router.Peers.OnInvalidateShortIDs(overlay.InvalidateShortIDs)
router.Routes.OnChange(overlay.InvalidateRoutes)
router.Macs = NewMacCache(macMaxAge,
@@ -204,3 +206,22 @@ func (router *NetworkRouter) relayBroadcast(srcPeer *mesh.Peer, key PacketKey) F
return op
}
// Persisting the set of peers we are supposed to connect to
const peersIdent = "directPeers"
func (router *NetworkRouter) persistPeers() {
if err := router.db.Save(peersIdent, router.ConnectionMaker.Targets()); err != nil {
log.Errorf("Error persisting peers: %s", err)
return
}
}
func (router *NetworkRouter) SetInitialPeers(peers []string) []error {
// Load is a no-op if persistence entry has never been saved
if err := router.db.Load(peersIdent, &peers); err != nil {
return []error{err}
}
log.Println("Initiating connections to peers:", peers)
return router.ConnectionMaker.InitiateConnections(peers, false)
}