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
}