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