@cryptotaxi247 / kubo / commits / 798569bb6

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, &notif.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