add "representation of received update" to return of Peers.ApplyUpdate

This commit is contained in:
Matthias Radestock committed 2015-04-06 14:17:23 +01:00
1 parent a58eb6ba7d
commit 8a2828d57d
2 files changed
+15 -11

No files matched your search

+9 -5
View File
@@ -69,15 +69,15 @@ func (peers *Peers) ForEach(fun func(*Peer)) {
//
// We add peers hitherto unknown to us, and update peers for which the
// update contains a more recent version than known to us. The return
// value is an "improved" update containing just these new/updated
// elements.
func (peers *Peers) ApplyUpdate(update []byte) (PeerNameSet, error) {
// value is a) a representation of the received update, and b) an
// "improved" update containing just these new/updated elements.
func (peers *Peers) ApplyUpdate(update []byte) (PeerNameSet, PeerNameSet, error) {
peers.Lock()
newPeers, decodedUpdate, decodedConns, err := peers.decodeUpdate(update)
if err != nil {
peers.Unlock()
return nil, err
return nil, nil, err
}
// By this point, we know the update doesn't refer to any peers we
@@ -97,7 +97,11 @@ func (peers *Peers) ApplyUpdate(update []byte) (PeerNameSet, error) {
// Don't need to hold peers lock any longer
peers.Unlock()
return setFromPeersMap(newUpdate), nil
updateNames := make(PeerNameSet)
for _, peer := range decodedUpdate {
updateNames[peer.Name] = void
}
return updateNames, setFromPeersMap(newUpdate), nil
}
func (peers *Peers) Names() PeerNameSet {
+6 -6
View File
@@ -386,29 +386,29 @@ func (router *Router) Gossip() GossipData {
}
func (router *Router) OnGossip(update []byte) (GossipData, error) {
newUpdate, err := router.applyTopologyUpdate(update)
_, newUpdate, err := router.applyTopologyUpdate(update)
if err != nil || len(newUpdate) == 0 {
return nil, err
}
return &TopologyGossipData{peers: router.Peers, update: newUpdate}, nil
}
func (router *Router) applyTopologyUpdate(update []byte) (PeerNameSet, error) {
newUpdate, err := router.Peers.ApplyUpdate(update)
func (router *Router) applyTopologyUpdate(update []byte) (PeerNameSet, PeerNameSet, error) {
origUpdate, newUpdate, err := router.Peers.ApplyUpdate(update)
if _, ok := err.(UnknownPeerError); err != nil && ok {
// That update contained a reference to a peer which wasn't
// itself included in the update, and we didn't know about
// already. We ignore this; eventually we should receive an
// update containing a complete topology.
log.Println("Topology gossip:", err)
return nil, nil
return nil, nil, nil
}
if err != nil {
return nil, err
return nil, nil, err
}
if len(newUpdate) > 0 {
router.ConnectionMaker.Refresh()
router.Routes.Recalculate()
}
return newUpdate, nil
return origUpdate, newUpdate, nil
}