8 var errNoValidFastSyncPeer = errors.New("no valid fast sync peer")
10 type fastSyncPeers struct {
15 func newFastSyncPeers() *fastSyncPeers {
16 return &fastSyncPeers{
17 peers: make(map[string]bool),
21 func (fs *fastSyncPeers) add(peerID string) {
25 if _, ok := fs.peers[peerID]; ok {
29 fs.peers[peerID] = false
32 func (fs *fastSyncPeers) delete(peerID string) {
36 delete(fs.peers, peerID)
39 func (fs *fastSyncPeers) selectIdlePeers() []string {
43 peers := make([]string, 0)
44 for peerID, isBusy := range fs.peers {
49 fs.peers[peerID] = true
50 peers = append(peers, peerID)
56 func (fs *fastSyncPeers) selectIdlePeer() (string, error) {
60 for peerID, isBusy := range fs.peers {
65 fs.peers[peerID] = true
69 return "", errNoValidFastSyncPeer
72 func (fs *fastSyncPeers) setIdle(peerID string) {
76 if _, ok := fs.peers[peerID]; !ok {
80 fs.peers[peerID] = false
83 func (fs *fastSyncPeers) size() int {
85 defer fs.mtx.RUnlock()