@cryptotaxi247 / kubo / commits / 1649b44ae

combine multiple bootstrap addrs into single peer info

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Jan 14, 2016 at 07:18 UTC 1649b44ae038680917d17ff9345c31ae703b08f6
2 files changed +45 -2
core/bootstrap.go
+14 -2
@@ -203,10 +203,22 @@ func bootstrapConnect(ctx context.Context, ph host.Host, peers []peer.PeerInfo)
203 }
204
205 func toPeerInfos(bpeers []config.BootstrapPeer) []peer.PeerInfo {
206 - var peers []peer.PeerInfo
206 + pinfos := make(map[peer.ID]*peer.PeerInfo)
207 for _, bootstrap := range bpeers {
208 - peers = append(peers, toPeerInfo(bootstrap))
208 + pinfo, ok := pinfos[bootstrap.ID()]
209 + if !ok {
210 + pinfo = new(peer.PeerInfo)
211 + pinfos[bootstrap.ID()] = pinfo
212 + pinfo.ID = bootstrap.ID()
213 + }
214 + pinfo.Addrs = append(pinfo.Addrs, bootstrap.Multiaddr())
215 + }
216 +
217 + var peers []peer.PeerInfo
218 + for _, pinfo := range pinfos {
219 + peers = append(peers, *pinfo)
220 }
221 +
222 return peers
223 }
224
core/bootstrap_test.go
+31
@@ -1,9 +1,11 @@
1 package core
2
3 import (
4 + "fmt"
5 "testing"
6
7 peer "github.com/ipfs/go-ipfs/p2p/peer"
8 + config "github.com/ipfs/go-ipfs/repo/config"
9 testutil "github.com/ipfs/go-ipfs/util/testutil"
10 )
11
@@ -23,3 +25,32 @@ func TestSubsetWhenMaxIsGreaterThanLengthOfSlice(t *testing.T) {
25 t.Fail()
26 }
27 }
28 +
29 +func TestMultipleAddrsPerPeer(t *testing.T) {
30 + var bsps []config.BootstrapPeer
31 + for i := 0; i < 10; i++ {
32 + pid, err := testutil.RandPeerID()
33 + if err != nil {
34 + t.Fatal(err)
35 + }
36 +
37 + addr := fmt.Sprintf("/ip4/127.0.0.1/tcp/5001/ipfs/%s", pid.Pretty())
38 + bsp1, err := config.ParseBootstrapPeer(addr)
39 + if err != nil {
40 + t.Fatal(err)
41 + }
42 +
43 + addr = fmt.Sprintf("/ip4/127.0.0.1/udp/5002/utp/ipfs/%s", pid.Pretty())
44 + bsp2, err := config.ParseBootstrapPeer(addr)
45 + if err != nil {
46 + t.Fatal(err)
47 + }
48 +
49 + bsps = append(bsps, bsp1, bsp2)
50 + }
51 +
52 + pinfos := toPeerInfos(bsps)
53 + if len(pinfos) != len(bsps)/2 {
54 + t.Fatal("expected fewer peers")
55 + }
56 +}