From 8112fae7b3679c56ff0d1266f7739c88b8817e6b Mon Sep 17 00:00:00 2001
From: Juan Batiz-Benet <juan@benet.ai>
Date: Sun, 21 Sep 2014 20:06:30 -0700
Subject: [PATCH] get bitswap working with dht

@perfmode using non-async version as apparently there's
a bug in async. will look into it.
---
 exchange/bitswap/bitswap.go           | 17 ++++++++++++-----
 exchange/bitswap/network/interface.go |  6 +++++-
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/exchange/bitswap/bitswap.go b/exchange/bitswap/bitswap.go
index 4f63e6c8..b78304a3 100644
--- a/exchange/bitswap/bitswap.go
+++ b/exchange/bitswap/bitswap.go
@@ -2,6 +2,7 @@ package bitswap
 
 import (
 	"errors"
+	"fmt"
 
 	context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
 	ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
@@ -65,12 +66,18 @@ func (bs *bitswap) Block(parent context.Context, k u.Key) (*blocks.Block, error)
 	// TODO add to wantlist
 	promise := bs.notifications.Subscribe(ctx, k)
 
+	// const maxProviders = 20
+	// using non-async version for now.
+	peersToQuery, err := bs.routing.FindProviders(ctx, k)
+	if err != nil {
+		return nil, fmt.Errorf("No providers found for %d (%v)", k, err)
+	}
+
 	go func() {
-		const maxProviders = 20
-		peersToQuery := bs.routing.FindProvidersAsync(ctx, k, maxProviders)
 		message := bsmsg.New()
 		message.AppendWanted(k)
-		for iiiii := range peersToQuery {
+		for _, iiiii := range peersToQuery {
+			// u.DOut("bitswap got peersToQuery: %s\n", iiiii)
 			go func(p *peer.Peer) {
 				response, err := bs.sender.SendRequest(ctx, p, message)
 				if err != nil {
@@ -125,9 +132,9 @@ func (bs *bitswap) ReceiveMessage(
 			continue // FIXME(brian): err ignored
 		}
 		go bs.notifications.Publish(block)
-		go func() {
+		go func(block blocks.Block) {
 			_ = bs.HasBlock(ctx, block) // FIXME err ignored
-		}()
+		}(block)
 	}
 
 	for _, key := range incoming.Wantlist() {
diff --git a/exchange/bitswap/network/interface.go b/exchange/bitswap/network/interface.go
index 15fa9c89..f3efc8fe 100644
--- a/exchange/bitswap/network/interface.go
+++ b/exchange/bitswap/network/interface.go
@@ -46,7 +46,11 @@ type NetMessageService interface {
 // TODO rename -> Router?
 type Routing interface {
 	// FindProvidersAsync returns a channel of providers for the given key
-	FindProvidersAsync(context.Context, u.Key, int) <-chan *peer.Peer
+	// FindProvidersAsync(context.Context, u.Key, int) <-chan *peer.Peer
+	// ^--- removed this for now because has some bugs apparently.
+
+	// FindProviders returns the providers for the given key
+	FindProviders(context.Context, u.Key) ([]*peer.Peer, error)
 
 	// Provide provides the key to the network
 	Provide(context.Context, u.Key) error
-- 
GitLab