From 9e14bcfe2db8f7d4d6322c67b727e75e53d88fc2 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Thu, 11 Dec 2014 05:42:05 +0000 Subject: [PATCH] changes from PR --- routing/dht/routing.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/routing/dht/routing.go b/routing/dht/routing.go index 6b6b547f5..fbdc7293a 100644 --- a/routing/dht/routing.go +++ b/routing/dht/routing.go @@ -148,15 +148,17 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co ps := newPeerSet() provs := dht.providers.GetProviders(ctx, key) for _, p := range provs { - count-- // NOTE: assuming that this list of peers is unique - ps.Add(p) - select { - case peerOut <- p: - case <-ctx.Done(): - return + if ps.AddIfSmallerThan(p, count) { + select { + case peerOut <- p: + case <-ctx.Done(): + return + } } - if count <= 0 { + + // If we have enough peers locally, dont bother with remote RPC + if ps.Size() >= count { return } } @@ -178,16 +180,14 @@ func (dht *IpfsDHT) findProvidersAsyncRoutine(ctx context.Context, key u.Key, co // Add unique providers from request, up to 'count' for _, prov := range provs { - if ps.Contains(prov) { - continue + if ps.AddIfSmallerThan(prov, count) { + select { + case peerOut <- prov: + case <-ctx.Done(): + log.Error("Context timed out sending more providers") + return nil, ctx.Err() + } } - select { - case peerOut <- prov: - case <-ctx.Done(): - log.Error("Context timed out sending more providers") - return nil, ctx.Err() - } - ps.Add(prov) if ps.Size() >= count { return &dhtQueryResult{success: true}, nil }