@@ -11,7 +11,7 @@ import (
11
11
"time"
12
12
13
13
"github.com/multiformats/go-base32"
14
- "github.com/multiformats/go-multiaddr"
14
+ ma "github.com/multiformats/go-multiaddr"
15
15
"github.com/multiformats/go-multihash"
16
16
17
17
"github.com/libp2p/go-libp2p-routing-helpers/tracing"
@@ -97,7 +97,7 @@ type FullRT struct {
97
97
keyToPeerMap map [string ]peer.ID
98
98
99
99
peerAddrsLk sync.RWMutex
100
- peerAddrs map [peer.ID ][]multiaddr .Multiaddr
100
+ peerAddrs map [peer.ID ][]ma .Multiaddr
101
101
102
102
bootstrapPeers []* peer.AddrInfo
103
103
@@ -208,7 +208,7 @@ func NewFullRT(h host.Host, protocolPrefix protocol.ID, options ...Option) (*Ful
208
208
keyToPeerMap : make (map [string ]peer.ID ),
209
209
bucketSize : dhtcfg .BucketSize ,
210
210
211
- peerAddrs : make (map [peer.ID ][]multiaddr .Multiaddr ),
211
+ peerAddrs : make (map [peer.ID ][]ma .Multiaddr ),
212
212
bootstrapPeers : bsPeers ,
213
213
214
214
triggerRefresh : make (chan struct {}),
@@ -229,11 +229,6 @@ func NewFullRT(h host.Host, protocolPrefix protocol.ID, options ...Option) (*Ful
229
229
return rt , nil
230
230
}
231
231
232
- type crawlVal struct {
233
- addrs []multiaddr.Multiaddr
234
- key kadkey.Key
235
- }
236
-
237
232
func (dht * FullRT ) runSubscriber () {
238
233
defer dht .wg .Done ()
239
234
ms , ok := dht .messageSender .(dht_pb.MessageSenderWithDisconnect )
@@ -310,7 +305,7 @@ func (dht *FullRT) runCrawler(ctx context.Context) {
310
305
defer dht .wg .Done ()
311
306
t := time .NewTicker (dht .crawlerInterval )
312
307
313
- foundPeers := make (map [peer.ID ]* crawlVal )
308
+ foundPeers := make (map [peer.ID ][]ma. Multiaddr )
314
309
foundPeersLk := sync.Mutex {}
315
310
316
311
initialTrigger := make (chan struct {}, 1 )
@@ -334,36 +329,20 @@ func (dht *FullRT) runCrawler(ctx context.Context) {
334
329
addrs = append (addrs , dht .bootstrapPeers ... )
335
330
dht .peerAddrsLk .Unlock ()
336
331
337
- for k := range foundPeers {
338
- delete (foundPeers , k )
339
- }
332
+ clear (foundPeers )
340
333
341
334
start := time .Now ()
342
335
limitErrOnce := sync.Once {}
343
336
dht .crawler .Run (ctx , addrs ,
344
337
func (p peer.ID , rtPeers []* peer.AddrInfo ) {
345
- conns := dht .h .Network ().ConnsToPeer (p )
346
- var addrs []multiaddr.Multiaddr
347
- for _ , conn := range conns {
348
- addr := conn .RemoteMultiaddr ()
349
- addrs = append (addrs , addr )
350
- }
351
-
352
- if len (addrs ) == 0 {
353
- logger .Debugf ("no connections to %v after successful query. keeping addresses from the peerstore" , p )
354
- addrs = dht .h .Peerstore ().Addrs (p )
355
- }
356
-
357
338
keep := kaddht .PublicRoutingTableFilter (dht , p )
358
339
if ! keep {
359
340
return
360
341
}
361
342
362
343
foundPeersLk .Lock ()
363
344
defer foundPeersLk .Unlock ()
364
- foundPeers [p ] = & crawlVal {
365
- addrs : addrs ,
366
- }
345
+ foundPeers [p ] = dht .h .Peerstore ().Addrs (p )
367
346
},
368
347
func (p peer.ID , err error ) {
369
348
dialErr , ok := err .(* swarm.DialError )
@@ -382,14 +361,14 @@ func (dht *FullRT) runCrawler(ctx context.Context) {
382
361
dur := time .Since (start )
383
362
logger .Infof ("crawl took %v" , dur )
384
363
385
- peerAddrs := make (map [peer.ID ][]multiaddr .Multiaddr )
364
+ peerAddrs := make (map [peer.ID ][]ma .Multiaddr )
386
365
kPeerMap := make (map [string ]peer.ID )
387
366
newRt := trie .New ()
388
- for peerID , foundCrawlVal := range foundPeers {
389
- foundCrawlVal . key = kadkey .KbucketIDToKey (kb .ConvertPeerID (peerID ))
390
- peerAddrs [peerID ] = foundCrawlVal . addrs
391
- kPeerMap [string (foundCrawlVal . key )] = peerID
392
- newRt .Add (foundCrawlVal . key )
367
+ for peerID , foundAddrs := range foundPeers {
368
+ kadKey : = kadkey .KbucketIDToKey (kb .ConvertPeerID (peerID ))
369
+ peerAddrs [peerID ] = foundAddrs
370
+ kPeerMap [string (kadKey )] = peerID
371
+ newRt .Add (kadKey )
393
372
}
394
373
395
374
dht .peerAddrsLk .Lock ()
@@ -427,12 +406,12 @@ func (dht *FullRT) CheckPeers(ctx context.Context, peers ...peer.ID) (int, int)
427
406
ctx , span := internal .StartSpan (ctx , "FullRT.CheckPeers" , trace .WithAttributes (attribute .Int ("NumPeers" , len (peers ))))
428
407
defer span .End ()
429
408
430
- var peerAddrs chan interface {}
409
+ var peerAddrs chan peer. AddrInfo
431
410
var total int
432
411
if len (peers ) == 0 {
433
412
dht .peerAddrsLk .RLock ()
434
413
total = len (dht .peerAddrs )
435
- peerAddrs = make (chan interface {} , total )
414
+ peerAddrs = make (chan peer. AddrInfo , total )
436
415
for k , v := range dht .peerAddrs {
437
416
peerAddrs <- peer.AddrInfo {
438
417
ID : k ,
@@ -443,7 +422,7 @@ func (dht *FullRT) CheckPeers(ctx context.Context, peers ...peer.ID) (int, int)
443
422
dht .peerAddrsLk .RUnlock ()
444
423
} else {
445
424
total = len (peers )
446
- peerAddrs = make (chan interface {} , total )
425
+ peerAddrs = make (chan peer. AddrInfo , total )
447
426
dht .peerAddrsLk .RLock ()
448
427
for _ , p := range peers {
449
428
peerAddrs <- peer.AddrInfo {
@@ -457,19 +436,18 @@ func (dht *FullRT) CheckPeers(ctx context.Context, peers ...peer.ID) (int, int)
457
436
458
437
var success uint64
459
438
460
- workers (100 , func (i interface {}) {
461
- a := i .(peer.AddrInfo )
439
+ workers (100 , func (ai peer.AddrInfo ) {
462
440
dialctx , dialcancel := context .WithTimeout (ctx , time .Second * 3 )
463
- if err := dht .h .Connect (dialctx , a ); err == nil {
441
+ if err := dht .h .Connect (dialctx , ai ); err == nil {
464
442
atomic .AddUint64 (& success , 1 )
465
443
}
466
444
dialcancel ()
467
445
}, peerAddrs )
468
446
return int (success ), total
469
447
}
470
448
471
- func workers (numWorkers int , fn func (interface {} ), inputs <- chan interface {} ) {
472
- jobs := make (chan interface {} )
449
+ func workers (numWorkers int , fn func (peer. AddrInfo ), inputs <- chan peer. AddrInfo ) {
450
+ jobs := make (chan peer. AddrInfo )
473
451
defer close (jobs )
474
452
for i := 0 ; i < numWorkers ; i ++ {
475
453
go func () {
@@ -1436,7 +1414,7 @@ func (dht *FullRT) FindPeer(ctx context.Context, id peer.ID) (pi peer.AddrInfo,
1436
1414
defer cancelquery ()
1437
1415
1438
1416
addrsCh := make (chan * peer.AddrInfo , 1 )
1439
- newAddrs := make ([]multiaddr .Multiaddr , 0 )
1417
+ newAddrs := make ([]ma .Multiaddr , 0 )
1440
1418
1441
1419
wg := sync.WaitGroup {}
1442
1420
wg .Add (1 )
@@ -1596,7 +1574,7 @@ func (dht *FullRT) FindLocal(id peer.ID) peer.AddrInfo {
1596
1574
return peer.AddrInfo {}
1597
1575
}
1598
1576
1599
- func (dht * FullRT ) maybeAddAddrs (p peer.ID , addrs []multiaddr .Multiaddr , ttl time.Duration ) {
1577
+ func (dht * FullRT ) maybeAddAddrs (p peer.ID , addrs []ma .Multiaddr , ttl time.Duration ) {
1600
1578
// Don't add addresses for self or our connected peers. We have better ones.
1601
1579
if p == dht .h .ID () || hasValidConnectedness (dht .h , p ) {
1602
1580
return
0 commit comments