@cryptotaxi247 / kubo / commits / 8112fae7b

get bitswap working with dht

@perfmode using non-async version as apparently there's a bug in async. will look into it.

Juan Batiz-Benet committed Sep 21, 2014 at 20:06 UTC 8112fae7b3679c56ff0d1266f7739c88b8817e6b
2 files changed +17 -6
exchange/bitswap/bitswap.go
+12 -5
@@ -2,6 +2,7 @@ package bitswap
2
3 import (
4 "errors"
5 + "fmt"
6
7 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
8 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)
66 // TODO add to wantlist
67 promise := bs.notifications.Subscribe(ctx, k)
68
69 + // const maxProviders = 20
70 + // using non-async version for now.
71 + peersToQuery, err := bs.routing.FindProviders(ctx, k)
72 + if err != nil {
73 + return nil, fmt.Errorf("No providers found for %d (%v)", k, err)
74 + }
75 +
76 go func() {
69 - const maxProviders = 20
70 - peersToQuery := bs.routing.FindProvidersAsync(ctx, k, maxProviders)
77 message := bsmsg.New()
78 message.AppendWanted(k)
73 - for iiiii := range peersToQuery {
79 + for _, iiiii := range peersToQuery {
80 + // u.DOut("bitswap got peersToQuery: %s\n", iiiii)
81 go func(p *peer.Peer) {
82 response, err := bs.sender.SendRequest(ctx, p, message)
83 if err != nil {
@@ -125,9 +132,9 @@ func (bs *bitswap) ReceiveMessage(
132 continue // FIXME(brian): err ignored
133 }
134 go bs.notifications.Publish(block)
128 - go func() {
135 + go func(block blocks.Block) {
136 _ = bs.HasBlock(ctx, block) // FIXME err ignored
130 - }()
137 + }(block)
138 }
139
140 for _, key := range incoming.Wantlist() {
exchange/bitswap/network/interface.go
+5 -1
@@ -46,7 +46,11 @@ type NetMessageService interface {
46 // TODO rename -> Router?
47 type Routing interface {
48 // FindProvidersAsync returns a channel of providers for the given key
49 - FindProvidersAsync(context.Context, u.Key, int) <-chan *peer.Peer
49 + // FindProvidersAsync(context.Context, u.Key, int) <-chan *peer.Peer
50 + // ^--- removed this for now because has some bugs apparently.
51 +
52 + // FindProviders returns the providers for the given key
53 + FindProviders(context.Context, u.Key) ([]*peer.Peer, error)
54
55 // Provide provides the key to the network
56 Provide(context.Context, u.Key) error