mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-30 18:13:54 +08:00
Merge pull request #2199 from ipfs/feat/multi-multiaddr-bootstrap
combine multiple bootstrap addrs into single peer info
This commit is contained in:
@ -203,10 +203,22 @@ func bootstrapConnect(ctx context.Context, ph host.Host, peers []peer.PeerInfo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func toPeerInfos(bpeers []config.BootstrapPeer) []peer.PeerInfo {
|
func toPeerInfos(bpeers []config.BootstrapPeer) []peer.PeerInfo {
|
||||||
var peers []peer.PeerInfo
|
pinfos := make(map[peer.ID]*peer.PeerInfo)
|
||||||
for _, bootstrap := range bpeers {
|
for _, bootstrap := range bpeers {
|
||||||
peers = append(peers, toPeerInfo(bootstrap))
|
pinfo, ok := pinfos[bootstrap.ID()]
|
||||||
|
if !ok {
|
||||||
|
pinfo = new(peer.PeerInfo)
|
||||||
|
pinfos[bootstrap.ID()] = pinfo
|
||||||
|
pinfo.ID = bootstrap.ID()
|
||||||
}
|
}
|
||||||
|
pinfo.Addrs = append(pinfo.Addrs, bootstrap.Multiaddr())
|
||||||
|
}
|
||||||
|
|
||||||
|
var peers []peer.PeerInfo
|
||||||
|
for _, pinfo := range pinfos {
|
||||||
|
peers = append(peers, *pinfo)
|
||||||
|
}
|
||||||
|
|
||||||
return peers
|
return peers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package core
|
package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
peer "github.com/ipfs/go-ipfs/p2p/peer"
|
peer "github.com/ipfs/go-ipfs/p2p/peer"
|
||||||
|
config "github.com/ipfs/go-ipfs/repo/config"
|
||||||
testutil "github.com/ipfs/go-ipfs/util/testutil"
|
testutil "github.com/ipfs/go-ipfs/util/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -23,3 +25,32 @@ func TestSubsetWhenMaxIsGreaterThanLengthOfSlice(t *testing.T) {
|
|||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMultipleAddrsPerPeer(t *testing.T) {
|
||||||
|
var bsps []config.BootstrapPeer
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
pid, err := testutil.RandPeerID()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
addr := fmt.Sprintf("/ip4/127.0.0.1/tcp/5001/ipfs/%s", pid.Pretty())
|
||||||
|
bsp1, err := config.ParseBootstrapPeer(addr)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
addr = fmt.Sprintf("/ip4/127.0.0.1/udp/5002/utp/ipfs/%s", pid.Pretty())
|
||||||
|
bsp2, err := config.ParseBootstrapPeer(addr)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
bsps = append(bsps, bsp1, bsp2)
|
||||||
|
}
|
||||||
|
|
||||||
|
pinfos := toPeerInfos(bsps)
|
||||||
|
if len(pinfos) != len(bsps)/2 {
|
||||||
|
t.Fatal("expected fewer peers")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user