@cryptotaxi247 / kubo / commits / a43724098

reduce dht bandwidth consumption

Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Mar 30, 2015 at 07:53 UTC a437240989c678ef133e3d25ca9680713d26c727
3 files changed +12 -7
routing/dht/handlers.go
+1 -1
@@ -226,5 +226,5 @@ func (dht *IpfsDHT) handleAddProvider(ctx context.Context, p peer.ID, pmes *pb.M
226 dht.providers.AddProvider(ctx, key, p)
227 }
228
229 - return pmes, nil // send back same msg as confirmation.
229 + return nil, nil
230 }
routing/dht/records.go
+7 -2
@@ -31,6 +31,10 @@ func (dht *IpfsDHT) getPublicKeyOnline(ctx context.Context, p peer.ID) (ci.PubKe
31 ctxT, cancelFunc := ctxutil.WithDeadlineFraction(ctx, 0.3)
32 defer cancelFunc()
33 if pk, err := dht.getPublicKeyFromNode(ctx, p); err == nil {
34 + err := dht.peerstore.AddPubKey(p, pk)
35 + if err != nil {
36 + return pk, err
37 + }
38 return pk, nil
39 }
40
@@ -38,7 +42,7 @@ func (dht *IpfsDHT) getPublicKeyOnline(ctx context.Context, p peer.ID) (ci.PubKe
42 log.Debugf("pk for %s not in peerstore, and peer failed. trying dht.", p)
43 pkkey := KeyForPublicKey(p)
44
41 - // ok, try the node itself. if they're overwhelmed or slow we can move on.
45 + // ok, now try the dht. Anyone who has previously fetched the key should have it
46 val, err := dht.GetValue(ctxT, pkkey)
47 if err != nil {
48 log.Warning("Failed to find requested public key.")
@@ -50,7 +54,8 @@ func (dht *IpfsDHT) getPublicKeyOnline(ctx context.Context, p peer.ID) (ci.PubKe
54 log.Debugf("Failed to unmarshal public key: %s", err)
55 return nil, err
56 }
53 - return pk, nil
57 +
58 + return pk, dht.peerstore.AddPubKey(p, pk)
59 }
60
61 func (dht *IpfsDHT) getPublicKeyFromNode(ctx context.Context, p peer.ID) (ci.PubKey, error) {
routing/dht/routing.go
+4 -4
@@ -91,7 +91,7 @@ func (dht *IpfsDHT) GetValue(ctx context.Context, key u.Key) ([]byte, error) {
91 }
92
93 // get closest peers in the routing table
94 - rtp := dht.routingTable.ListPeers()
94 + rtp := dht.routingTable.NearestPeers(kb.ConvertKey(key), AlphaValue)
95 log.Debugf("peers in rt: %s", len(rtp), rtp)
96 if len(rtp) == 0 {
97 log.Warning("No peers from routing table!")
@@ -256,7 +256,7 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co
256 return &dhtQueryResult{closerPeers: clpeers}, nil
257 })
258
259 - peers := dht.routingTable.ListPeers()
259 + peers := dht.routingTable.NearestPeers(kb.ConvertKey(key), AlphaValue)
260 _, err := query.Run(ctx, peers)
261 if err != nil {
262 log.Debugf("Query error: %s", err)
@@ -276,7 +276,7 @@ func (dht *IpfsDHT) FindPeer(ctx context.Context, id peer.ID) (peer.PeerInfo, er
276 return pi, nil
277 }
278
279 - peers := dht.routingTable.ListPeers()
279 + peers := dht.routingTable.NearestPeers(kb.ConvertPeerID(id), AlphaValue)
280 if len(peers) == 0 {
281 return peer.PeerInfo{}, errors.Wrap(kb.ErrLookupFailure)
282 }
@@ -342,7 +342,7 @@ func (dht *IpfsDHT) FindPeersConnectedToPeer(ctx context.Context, id peer.ID) (<
342 peerchan := make(chan peer.PeerInfo, asyncQueryBuffer)
343 peersSeen := peer.Set{}
344
345 - peers := dht.routingTable.ListPeers()
345 + peers := dht.routingTable.NearestPeers(kb.ConvertPeerID(id), AlphaValue)
346 if len(peers) == 0 {
347 return nil, errors.Wrap(kb.ErrLookupFailure)
348 }