diff --git a/exchange/bitswap/bitswap.go b/exchange/bitswap/bitswap.go index 0dcbc0649..f4a170e78 100644 --- a/exchange/bitswap/bitswap.go +++ b/exchange/bitswap/bitswap.go @@ -176,14 +176,16 @@ func (bs *bitswap) sendWantListTo(ctx context.Context, peers <-chan peer.PeerInf message.AddEntry(wanted.Key, wanted.Priority) } wg := sync.WaitGroup{} - for peerToQuery := range peers { - log.Event(ctx, "PeerToQuery", peerToQuery.ID) + for pi := range peers { + log.Debugf("bitswap.sendWantListTo: %s %s", pi.ID, pi.Addrs) + log.Event(ctx, "PeerToQuery", pi.ID) wg.Add(1) - go func(p peer.ID) { + go func(pi peer.PeerInfo) { defer wg.Done() + p := pi.ID log.Event(ctx, "DialPeer", p) - err := bs.sender.DialPeer(ctx, p) + err := bs.sender.DialPeer(ctx, pi) if err != nil { log.Errorf("Error sender.DialPeer(%s): %s", p, err) return @@ -198,7 +200,7 @@ func (bs *bitswap) sendWantListTo(ctx context.Context, peers <-chan peer.PeerInf // communication fails. May require slightly different API to // get better guarantees. May need shared sequence numbers. bs.engine.MessageSent(p, message) - }(peerToQuery.ID) + }(pi) } wg.Wait() return nil diff --git a/exchange/bitswap/network/interface.go b/exchange/bitswap/network/interface.go index 94ceadbff..61837149d 100644 --- a/exchange/bitswap/network/interface.go +++ b/exchange/bitswap/network/interface.go @@ -12,7 +12,7 @@ import ( type BitSwapNetwork interface { // DialPeer ensures there is a connection to peer. - DialPeer(context.Context, peer.ID) error + DialPeer(context.Context, peer.PeerInfo) error // SendMessage sends a BitSwap message to a peer. SendMessage( diff --git a/exchange/bitswap/network/ipfs_impl.go b/exchange/bitswap/network/ipfs_impl.go index 3a7a06091..f94d64000 100644 --- a/exchange/bitswap/network/ipfs_impl.go +++ b/exchange/bitswap/network/ipfs_impl.go @@ -53,8 +53,9 @@ func (bsnet *impl) handleNewStream(s inet.Stream) { } -func (bsnet *impl) DialPeer(ctx context.Context, p peer.ID) error { - return bsnet.network.DialPeer(ctx, p) +func (bsnet *impl) DialPeer(ctx context.Context, p peer.PeerInfo) error { + bsnet.network.Peerstore().AddAddresses(p.ID, p.Addrs) + return bsnet.network.DialPeer(ctx, p.ID) } func (bsnet *impl) SendMessage( diff --git a/exchange/bitswap/testnet/network.go b/exchange/bitswap/testnet/network.go index 9e17b67f4..179918258 100644 --- a/exchange/bitswap/testnet/network.go +++ b/exchange/bitswap/testnet/network.go @@ -165,10 +165,10 @@ func (nc *networkClient) SendRequest( return nc.network.SendRequest(ctx, nc.local, to, message) } -func (nc *networkClient) DialPeer(ctx context.Context, p peer.ID) error { +func (nc *networkClient) DialPeer(ctx context.Context, p peer.PeerInfo) error { // no need to do anything because dialing isn't a thing in this test net. - if !nc.network.HasPeer(p) { - return fmt.Errorf("Peer not in network: %s", p) + if !nc.network.HasPeer(p.ID) { + return fmt.Errorf("Peer not in network: %s", p.ID) } return nil }