don't provide same block twice during call to dht provide
License: MIT Signed-off-by: Jeromy <why@ipfs.io>
Jeromy committed
Aug 24, 2016 at 10:17 UTC
798569bb68c100d09f92971923b6c495b4fc5136
1 file changed
+6
core/commands/dht.go
+6
@@ -352,6 +352,7 @@ func provideKeys(ctx context.Context, r routing.IpfsRouting, keys []key.Key) {
352
}
353
354
func provideKeysRec(ctx context.Context, r routing.IpfsRouting, dserv dag.DAGService, keys []key.Key) {
355
+ provided := make(map[key.Key]struct{})
356
for _, k := range keys {
357
kset := key.NewKeySet()
358
node, err := dserv.Get(ctx, k)
@@ -371,6 +372,10 @@ func provideKeysRec(ctx context.Context, r routing.IpfsRouting, dserv dag.DAGSer
372
}
373
374
for _, k := range kset.Keys() {
375
+ if _, ok := provided[k]; ok {
376
+ continue
377
+ }
378
+
379
err = r.Provide(ctx, k)
380
if err != nil {
381
notif.PublishQueryEvent(ctx, ¬if.QueryEvent{
@@ -379,6 +384,7 @@ func provideKeysRec(ctx context.Context, r routing.IpfsRouting, dserv dag.DAGSer
384
})
385
return
386
}
387
+ provided[k] = struct{}{}
388
}
389
}
390