@cryptotaxi247 / kubo / commits / 39e9328e4

ensure testnet peers get evenly connected mesh

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

Jeromy committed Jul 15, 2017 at 22:18 UTC 39e9328e47dae00ad446a84686472ded9a1987c1
3 files changed +24 -3
exchange/bitswap/testnet/peernet.go
+2 -2
@@ -1,7 +1,7 @@
1 package bitswap
2
3 import (
4 - context "context"
4 + "context"
5 bsnet "github.com/ipfs/go-ipfs/exchange/bitswap/network"
6 mockrouting "github.com/ipfs/go-ipfs/routing/mock"
7 testutil "github.com/ipfs/go-ipfs/thirdparty/testutil"
@@ -37,4 +37,4 @@ func (pn *peernet) HasPeer(p peer.ID) bool {
37 return false
38 }
39
40 -var _ Network = &peernet{}
40 +var _ Network = (*peernet)(nil)
exchange/bitswap/testnet/virtual.go
+21
@@ -9,16 +9,21 @@ import (
9 mockrouting "github.com/ipfs/go-ipfs/routing/mock"
10 delay "github.com/ipfs/go-ipfs/thirdparty/delay"
11 testutil "github.com/ipfs/go-ipfs/thirdparty/testutil"
12 +
13 routing "gx/ipfs/QmPjTrrSfE6TzLv6ya6VWhGcCgPrUAdcgrDcQyRDX2VyW1/go-libp2p-routing"
14 + logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
15 cid "gx/ipfs/QmTprEaAA2A9bst5XH7exuyi5KzNMK3SEDNN8rBDnKWcUS/go-cid"
16 peer "gx/ipfs/QmXYjuNuxVzXKJCfWasQk1RqkhVLDM9jtUKhqc2WPQmFSB/go-libp2p-peer"
17 )
18
19 +var log = logging.Logger("bstestnet")
20 +
21 func VirtualNetwork(rs mockrouting.Server, d delay.D) Network {
22 return &network{
23 clients: make(map[peer.ID]bsnet.Receiver),
24 delay: d,
25 routingserver: rs,
26 + conns: make(map[string]struct{}),
27 }
28 }
29
@@ -26,6 +31,7 @@ type network struct {
31 clients map[peer.ID]bsnet.Receiver
32 routingserver mockrouting.Server
33 delay delay.D
34 + conns map[string]struct{}
35 }
36
37 func (n *network) Adapter(p testutil.Identity) bsnet.BitSwapNetwork {
@@ -149,7 +155,22 @@ func (nc *networkClient) ConnectTo(_ context.Context, p peer.ID) error {
155 if !nc.network.HasPeer(p) {
156 return errors.New("no such peer in network")
157 }
158 + tag := tagForPeers(nc.local, p)
159 + if _, ok := nc.network.conns[tag]; ok {
160 + log.Warning("ALREADY CONNECTED TO PEER (is this a reconnect? test lib needs fixing)")
161 + return nil
162 + }
163 + nc.network.conns[tag] = struct{}{}
164 + // TODO: add handling for disconnects
165 +
166 nc.network.clients[p].PeerConnected(nc.local)
167 nc.Receiver.PeerConnected(p)
168 return nil
169 }
170 +
171 +func tagForPeers(a, b peer.ID) string {
172 + if a < b {
173 + return string(a + b)
174 + }
175 + return string(b + a)
176 +}
exchange/bitswap/testutils.go
+1 -1
@@ -59,7 +59,7 @@ func (g *SessionGenerator) Instances(n int) []Instance {
59 for i, inst := range instances {
60 for j := i + 1; j < len(instances); j++ {
61 oinst := instances[j]
62 - inst.Exchange.PeerConnected(oinst.Peer)
62 + inst.Exchange.network.ConnectTo(context.Background(), oinst.Peer)
63 }
64 }
65 return instances