@cryptotaxi247 / kubo / commits / 5259cf06d

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