Skip to content

Commit b298815

Browse files
n8mgrChrisSchinnerl
authored andcommitted
return connected peers first
1 parent cc910f6 commit b298815

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
default: patch
3+
---
4+
5+
# Syncer: return connected peers first to avoid stale peers in the store.

syncer/peer.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -230,17 +230,34 @@ func (s *Syncer) handleRPC(id types.Specifier, stream *gateway.Stream, origin *P
230230

231231
switch r := gateway.ObjectForID(id).(type) {
232232
case *gateway.RPCShareNodes:
233-
peers, err := s.pm.Peers()
234-
if err != nil {
235-
return fmt.Errorf("failed to fetch peers: %w", err)
236-
} else if n := len(peers); n > 10 {
237-
frand.Shuffle(n, func(i, j int) {
238-
peers[i], peers[j] = peers[j], peers[i]
239-
})
240-
peers = peers[:10]
233+
seen := make(map[string]struct{})
234+
// check connected peers first
235+
connected := s.Peers()
236+
frand.Shuffle(len(connected), func(i, j int) { connected[i], connected[j] = connected[j], connected[i] })
237+
for i := 0; i < len(connected) && len(r.Peers) < 10; i++ {
238+
p := connected[i]
239+
if _, ok := seen[p.Addr()]; ok || p.Inbound {
240+
continue
241+
}
242+
r.Peers = append(r.Peers, p.Addr())
243+
seen[p.Addr()] = struct{}{}
241244
}
242-
for _, p := range peers {
243-
r.Peers = append(r.Peers, p.Address)
245+
246+
if len(r.Peers) < 10 {
247+
// fill the rest with random known peers
248+
morePeers, err := s.pm.Peers()
249+
if err != nil {
250+
return fmt.Errorf("failed to fetch peers: %w", err)
251+
}
252+
frand.Shuffle(len(morePeers), func(i, j int) { morePeers[i], morePeers[j] = morePeers[j], morePeers[i] })
253+
for i := 0; i < len(morePeers) && len(r.Peers) < 10; i++ {
254+
p := morePeers[i]
255+
if _, ok := seen[p.Address]; ok {
256+
continue
257+
}
258+
r.Peers = append(r.Peers, p.Address)
259+
seen[p.Address] = struct{}{}
260+
}
244261
}
245262
if err := stream.WriteResponse(r); err != nil {
246263
return err

0 commit comments

Comments
 (0)