OSDN Git Service

netsync add test case (#365)
[bytom/vapor.git] / netsync / peers / peer.go
index e74a458..ef90812 100644 (file)
@@ -30,6 +30,7 @@ const (
 var (
        errSendStatusMsg = errors.New("send status msg fail")
        ErrPeerMisbehave = errors.New("peer is misbehave")
+       ErrNoValidPeer   = errors.New("Can't find valid fast sync peer")
 )
 
 //BasePeer is the interface for connection level peer
@@ -558,6 +559,19 @@ func (ps *PeerSet) GetPeer(id string) *Peer {
        return ps.peers[id]
 }
 
+func (ps *PeerSet) GetPeersByHeight(height uint64) []*Peer {
+       ps.mtx.RLock()
+       defer ps.mtx.RUnlock()
+
+       peers := []*Peer{}
+       for _, peer := range ps.peers {
+               if peer.Height() >= height {
+                       peers = append(peers, peer)
+               }
+       }
+       return peers
+}
+
 func (ps *PeerSet) GetPeerInfos() []*PeerInfo {
        ps.mtx.RLock()
        defer ps.mtx.RUnlock()
@@ -658,3 +672,19 @@ func (ps *PeerSet) SetStatus(peerID string, height uint64, hash *bc.Hash) {
 
        peer.SetBestStatus(height, hash)
 }
+
+func (ps *PeerSet) SetIrreversibleStatus(peerID string, height uint64, hash *bc.Hash) {
+       peer := ps.GetPeer(peerID)
+       if peer == nil {
+               return
+       }
+
+       peer.SetIrreversibleStatus(height, hash)
+}
+
+func (ps *PeerSet) Size() int {
+       ps.mtx.RLock()
+       defer ps.mtx.RUnlock()
+
+       return len(ps.peers)
+}