diff --git a/blockchain/pool.go b/blockchain/pool.go index 66d1934c..a01b2e23 100644 --- a/blockchain/pool.go +++ b/blockchain/pool.go @@ -107,7 +107,9 @@ func (pool *BlockPool) removeTimedoutPeers() { } } if peer.didTimeout { + pool.peersMtx.Lock() // Lock pool.removePeer(peer.id) + pool.peersMtx.Unlock() } } } @@ -224,7 +226,7 @@ func (pool *BlockPool) removePeer(peerID string) { for _, request := range pool.requests { if request.getPeerID() == peerID { pool.numPending++ - request.redo() // pick another peer and ... + go request.redo() // pick another peer and ... } } delete(pool.peers, peerID) @@ -430,6 +432,7 @@ func (bpr *bpRequester) reset() { } // Tells bpRequester to pick another peer and try again. +// NOTE: blocking func (bpr *bpRequester) redo() { bpr.redoCh <- struct{}{} } diff --git a/blockchain/pool_test.go b/blockchain/pool_test.go index e22c127f..a70c96d5 100644 --- a/blockchain/pool_test.go +++ b/blockchain/pool_test.go @@ -85,7 +85,7 @@ func TestTimeout(t *testing.T) { pool.Start() for _, peer := range peers { - log.Info("Peer", peer.id) + log.Info("Peer", "id", peer.id) } // Introduce each peer. diff --git a/p2p/peer.go b/p2p/peer.go index ba3ed790..fc87365a 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -119,9 +119,9 @@ func (p *Peer) WriteTo(w io.Writer) (n int64, err error) { func (p *Peer) String() string { if p.outbound { - return fmt.Sprintf("Peer{->%v}", p.mconn) + return fmt.Sprintf("Peer{%v out}", p.Key) } else { - return fmt.Sprintf("Peer{%v->}", p.mconn) + return fmt.Sprintf("Peer{%v in}", p.Key) } } diff --git a/p2p/peer_set_test.go b/p2p/peer_set_test.go index a9dbd0bf..90bd8670 100644 --- a/p2p/peer_set_test.go +++ b/p2p/peer_set_test.go @@ -73,11 +73,9 @@ func newPeerInIPRange(ipBytes ...string) *Peer { for i, ipByte := range ipBytes { ips[i] = ipByte } - for i := len(ipBytes); i < 4; i++ { ips[i] = Fmt("%v", rand.Int()%256) } - ipS := strings.Join(ips, ".") return &Peer{ Key: RandStr(12), @@ -92,19 +90,19 @@ func TestIPRanges(t *testing.T) { // test /8 maxPeersPerIPRange = [4]int{2, 2, 2, 2} - peer := newPeerInIPRange("54") + peer := newPeerInIPRange("54", "1") if err := peerSet.Add(peer); err != nil { t.Errorf("Failed to add new peer") } - peer = newPeerInIPRange("54") + peer = newPeerInIPRange("54", "2") if err := peerSet.Add(peer); err != nil { t.Errorf("Failed to add new peer") } - peer = newPeerInIPRange("54") + peer = newPeerInIPRange("54", "3") if err := peerSet.Add(peer); err == nil { t.Errorf("Added peer when we shouldn't have") } - peer = newPeerInIPRange("55") + peer = newPeerInIPRange("55", "1") if err := peerSet.Add(peer); err != nil { t.Errorf("Failed to add new peer") } @@ -112,19 +110,19 @@ func TestIPRanges(t *testing.T) { // test /16 peerSet = NewPeerSet() maxPeersPerIPRange = [4]int{3, 2, 1, 1} - peer = newPeerInIPRange("54", "112") + peer = newPeerInIPRange("54", "112", "1") if err := peerSet.Add(peer); err != nil { t.Errorf("Failed to add new peer") } - peer = newPeerInIPRange("54", "112") + peer = newPeerInIPRange("54", "112", "2") if err := peerSet.Add(peer); err != nil { t.Errorf("Failed to add new peer") } - peer = newPeerInIPRange("54", "112") + peer = newPeerInIPRange("54", "112", "3") if err := peerSet.Add(peer); err == nil { t.Errorf("Added peer when we shouldn't have") } - peer = newPeerInIPRange("54", "113") + peer = newPeerInIPRange("54", "113", "1") if err := peerSet.Add(peer); err != nil { t.Errorf("Failed to add new peer") } @@ -132,19 +130,19 @@ func TestIPRanges(t *testing.T) { // test /24 peerSet = NewPeerSet() maxPeersPerIPRange = [4]int{5, 3, 2, 1} - peer = newPeerInIPRange("54", "112", "11") + peer = newPeerInIPRange("54", "112", "11", "1") if err := peerSet.Add(peer); err != nil { t.Errorf("Failed to add new peer") } - peer = newPeerInIPRange("54", "112", "11") + peer = newPeerInIPRange("54", "112", "11", "2") if err := peerSet.Add(peer); err != nil { t.Errorf("Failed to add new peer") } - peer = newPeerInIPRange("54", "112", "11") + peer = newPeerInIPRange("54", "112", "11", "3") if err := peerSet.Add(peer); err == nil { t.Errorf("Added peer when we shouldn't have") } - peer = newPeerInIPRange("54", "112", "12") + peer = newPeerInIPRange("54", "112", "12", "1") if err := peerSet.Add(peer); err != nil { t.Errorf("Failed to add new peer") }