dht: kick off all the queries wit every node in our rt
s/kademlia calls for makign sure to query all peers we have in our routing table, not just those closest. this helps ensure most queries resolve properly.
Juan Batiz-Benet committed
Jan 18, 2015 at 01:00 UTC
5259cf06d64d9e9ecf9a6ffd8c8c6752ed1e8360
1 file changed
+11
-13
routing/dht/routing.go
+11
-13
@@ -88,9 +88,7 @@ func (dht *IpfsDHT) GetValue(ctx context.Context, key u.Key) ([]byte, error) {
88
// get closest peers in the routing table
89
rtp := dht.routingTable.ListPeers()
90
log.Debugf("peers in rt: %s", len(rtp), rtp)
91
-
92
- closest := dht.routingTable.NearestPeers(kb.ConvertKey(key), PoolSize)
93
- if closest == nil || len(closest) == 0 {
91
+ if len(rtp) == 0 {
92
log.Warning("No peers from routing table!")
93
return nil, errors.Wrap(kb.ErrLookupFailure)
94
}
@@ -111,7 +109,7 @@ func (dht *IpfsDHT) GetValue(ctx context.Context, key u.Key) ([]byte, error) {
109
})
110
111
// run it!
114
- result, err := query.Run(ctx, closest)
112
+ result, err := query.Run(ctx, rtp)
113
if err != nil {
114
return nil, err
115
}
@@ -170,7 +168,7 @@ func (dht *IpfsDHT) FindProviders(ctx context.Context, key u.Key) ([]peer.PeerIn
168
// to the given key
169
func (dht *IpfsDHT) getClosestPeers(ctx context.Context, key u.Key) (<-chan peer.ID, error) {
170
e := log.EventBegin(ctx, "getClosestPeers", &key)
173
- tablepeers := dht.routingTable.NearestPeers(kb.ConvertKey(key), AlphaValue)
171
+ tablepeers := dht.routingTable.ListPeers()
172
if len(tablepeers) == 0 {
173
return nil, errors.Wrap(kb.ErrLookupFailure)
174
}
@@ -313,7 +311,7 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co
311
return &dhtQueryResult{closerPeers: clpeers}, nil
312
})
313
316
- peers := dht.routingTable.NearestPeers(kb.ConvertKey(key), AlphaValue)
314
+ peers := dht.routingTable.ListPeers()
315
_, err := query.Run(ctx, peers)
316
if err != nil {
317
log.Errorf("Query error: %s", err)
@@ -329,13 +327,13 @@ func (dht *IpfsDHT) FindPeer(ctx context.Context, id peer.ID) (peer.PeerInfo, er
327
return pi, nil
328
}
329
332
- closest := dht.routingTable.NearestPeers(kb.ConvertPeerID(id), AlphaValue)
333
- if closest == nil || len(closest) == 0 {
330
+ peers := dht.routingTable.ListPeers()
331
+ if len(peers) == 0 {
332
return peer.PeerInfo{}, errors.Wrap(kb.ErrLookupFailure)
333
}
334
335
// Sanity...
338
- for _, p := range closest {
336
+ for _, p := range peers {
337
if p == id {
338
log.Error("Found target peer in list of closest peers...")
339
return dht.peerstore.PeerInfo(p), nil
@@ -367,7 +365,7 @@ func (dht *IpfsDHT) FindPeer(ctx context.Context, id peer.ID) (peer.PeerInfo, er
365
})
366
367
// run it!
370
- result, err := query.Run(ctx, closest)
368
+ result, err := query.Run(ctx, peers)
369
if err != nil {
370
return peer.PeerInfo{}, err
371
}
@@ -386,8 +384,8 @@ func (dht *IpfsDHT) FindPeersConnectedToPeer(ctx context.Context, id peer.ID) (<
384
peerchan := make(chan peer.PeerInfo, asyncQueryBuffer)
385
peersSeen := peer.Set{}
386
389
- closest := dht.routingTable.NearestPeers(kb.ConvertPeerID(id), AlphaValue)
390
- if closest == nil || len(closest) == 0 {
387
+ peers := dht.routingTable.ListPeers()
388
+ if len(peers) == 0 {
389
return nil, errors.Wrap(kb.ErrLookupFailure)
390
}
391
@@ -432,7 +430,7 @@ func (dht *IpfsDHT) FindPeersConnectedToPeer(ctx context.Context, id peer.ID) (<
430
// run it! run it asynchronously to gen peers as results are found.
431
// this does no error checking
432
go func() {
435
- if _, err := query.Run(ctx, closest); err != nil {
433
+ if _, err := query.Run(ctx, peers); err != nil {
434
log.Error(err)
435
}
436