From c8876e144ffe67347e6b27d6a676ef19ac7f1fe2 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 17 Sep 2014 13:18:33 +0100 Subject: [PATCH] Revert "Change iteration over connection decoding to abort after the first error, and let the UnknownPeersError know which peer was unknown" This reverts commit 978d374820098ed509de4f08ff96afc49da79093. --- peer_cache.go | 28 +++++++++++++--------------- types.go | 1 - utils.go | 2 +- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/peer_cache.go b/peer_cache.go index d9910c95..a499d5ae 100644 --- a/peer_cache.go +++ b/peer_cache.go @@ -177,22 +177,24 @@ func (cache *PeerCache) decodeUpdate(update []byte, router *Router) (newPeers ma } } + unknownPeers := false for _, connsBuf := range decodedConns { - err = connsIterator(connsBuf, func(remoteNameByte []byte, _ string) error { + connsIterator(connsBuf, func(remoteNameByte []byte, _ string) { remoteName := PeerNameFromBin(remoteNameByte) if _, found := newPeers[remoteName]; found { - return nil + return } if _, found := cache.table[remoteName]; found { - return nil + return } // Update refers to a peer which we have no knowledge // of. Thus we can't apply the update. Abort. - return UnknownPeersError{remoteName} + unknownPeers = true }) - if err != nil { - break - } + } + if unknownPeers { + err = UnknownPeersError{} + return } return } @@ -280,7 +282,7 @@ func decodePeerNoConns(dec *gob.Decoder) (nameByte []byte, uid uint64, version u return } -func connsIterator(input []byte, fun func([]byte, string) error) error { +func connsIterator(input []byte, fun func([]byte, string)) { buf := new(bytes.Buffer) buf.Write(input) dec := gob.NewDecoder(buf) @@ -288,26 +290,22 @@ func connsIterator(input []byte, fun func([]byte, string) error) error { var nameByte []byte err := dec.Decode(&nameByte) if err == io.EOF { - return nil + return } checkFatal(err) var foundAt string checkFatal(dec.Decode(&foundAt)) - if err = fun(nameByte, string(foundAt)); err != nil { - return err - } + fun(nameByte, string(foundAt)) } - return nil } func readConnsMap(peer *Peer, buf []byte, table map[PeerName]*Peer) map[PeerName]Connection { conns := make(map[PeerName]Connection) - connsIterator(buf, func(nameByte []byte, remoteTCPAddr string) error { + connsIterator(buf, func(nameByte []byte, remoteTCPAddr string) { name := PeerNameFromBin(nameByte) remotePeer := table[name] conn := NewRemoteConnection(peer, remotePeer, remoteTCPAddr) conns[name] = conn - return nil }) return conns } diff --git a/types.go b/types.go index c4807582..093fa6d9 100644 --- a/types.go +++ b/types.go @@ -123,7 +123,6 @@ type FrameTooBigError struct { } type UnknownPeersError struct { - Name PeerName } type NameCollisionError struct { diff --git a/utils.go b/utils.go index 6979b158..da57cf2a 100644 --- a/utils.go +++ b/utils.go @@ -39,7 +39,7 @@ func (ftbe FrameTooBigError) Error() string { } func (upe UnknownPeersError) Error() string { - return fmt.Sprint("Reference to unknown peer: ", upe.Name) + return fmt.Sprint("Reference to unknown peers") } func (nce NameCollisionError) Error() string {