From 39febb1910fa1ba17e530d1c88e8aec4a0060ea2 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Tue, 12 Jun 2018 14:37:29 -0700 Subject: [PATCH 1/3] make ipfs swarm connect /ipfs/QmId work fixes #5102 Also, allow specifying multiple addresses for a single peer. License: MIT Signed-off-by: Steven Allen --- core/commands/swarm.go | 20 ++++++++++++++++---- package.json | 4 ++-- repo/config/bootstrap_peers.go | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/core/commands/swarm.go b/core/commands/swarm.go index 800d4f0e2..8097e6976 100644 --- a/core/commands/swarm.go +++ b/core/commands/swarm.go @@ -18,8 +18,9 @@ import ( mafilter "gx/ipfs/QmSMZwvs3n4GBikZ7hKzT17c3bk65FmyZo2JqtJ16swqCv/multiaddr-filter" swarm "gx/ipfs/QmSvhbgtjQJKdT5avEeb7cvjYs7YrhebJyM1K6GAnkKgfd/go-libp2p-swarm" ma "gx/ipfs/QmUxSEGbv2nmYNnfXi7839wwQqTN3kwQeUxe8dTjZWZs7J/go-multiaddr" + peer "gx/ipfs/QmVf8hTAsLLFtn4WPCRNdnaF2Eag2qTBS6uR8AiHPZARXy/go-libp2p-peer" pstore "gx/ipfs/QmZhsmorLpD9kmQ4ynbAu4vbKv2goMUnXazwGA4gnWHDjB/go-libp2p-peerstore" - iaddr "gx/ipfs/QmckPUj15AbTcLh6MpDEsQpfVCx34tmP2Xg1aNwLb5fiRF/go-ipfs-addr" + iaddr "gx/ipfs/QmaKviZCLQrpuyFdSjteik7kJFcQpcyZgb1VuuwaCBBaEa/go-ipfs-addr" cmdkit "gx/ipfs/QmdE4gMduCKCGAcczM2F5ioYDfdeKuPix138wrES1YSr7f/go-ipfs-cmdkit" ) @@ -522,16 +523,27 @@ func parseAddresses(addrs []string) (iaddrs []iaddr.IPFSAddr, err error) { // peersWithAddresses is a function that takes in a slice of string peer addresses // (multiaddr + peerid) and returns a slice of properly constructed peers -func peersWithAddresses(addrs []string) (pis []pstore.PeerInfo, err error) { +func peersWithAddresses(addrs []string) ([]pstore.PeerInfo, error) { iaddrs, err := parseAddresses(addrs) if err != nil { return nil, err } + peers := make(map[peer.ID][]ma.Multiaddr, len(iaddrs)) for _, iaddr := range iaddrs { + id := iaddr.ID() + current, ok := peers[id] + if tpt := iaddr.Transport(); tpt != nil { + peers[id] = append(current, tpt) + } else if !ok { + peers[id] = nil + } + } + pis := make([]pstore.PeerInfo, 0, len(peers)) + for id, maddrs := range peers { pis = append(pis, pstore.PeerInfo{ - ID: iaddr.ID(), - Addrs: []ma.Multiaddr{iaddr.Transport()}, + ID: id, + Addrs: maddrs, }) } return pis, nil diff --git a/package.json b/package.json index 78c4fd04c..084f08964 100644 --- a/package.json +++ b/package.json @@ -404,9 +404,9 @@ }, { "author": "why", - "hash": "QmckPUj15AbTcLh6MpDEsQpfVCx34tmP2Xg1aNwLb5fiRF", + "hash": "QmaKviZCLQrpuyFdSjteik7kJFcQpcyZgb1VuuwaCBBaEa", "name": "go-ipfs-addr", - "version": "0.1.12" + "version": "0.1.13" }, { "author": "The Go Authors", diff --git a/repo/config/bootstrap_peers.go b/repo/config/bootstrap_peers.go index e66ad36bb..74ca92e07 100644 --- a/repo/config/bootstrap_peers.go +++ b/repo/config/bootstrap_peers.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" - iaddr "gx/ipfs/QmckPUj15AbTcLh6MpDEsQpfVCx34tmP2Xg1aNwLb5fiRF/go-ipfs-addr" + iaddr "gx/ipfs/QmaKviZCLQrpuyFdSjteik7kJFcQpcyZgb1VuuwaCBBaEa/go-ipfs-addr" ) // DefaultBootstrapAddresses are the hardcoded bootstrap addresses From 78f82e8e79a85aa6f1e5a80b62663b7d63ed1f98 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Tue, 12 Jun 2018 14:50:16 -0700 Subject: [PATCH 2/3] allow disconnecting from a peer by ID License: MIT Signed-off-by: Steven Allen --- core/commands/swarm.go | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/core/commands/swarm.go b/core/commands/swarm.go index 8097e6976..7fb4c2004 100644 --- a/core/commands/swarm.go +++ b/core/commands/swarm.go @@ -19,6 +19,7 @@ import ( swarm "gx/ipfs/QmSvhbgtjQJKdT5avEeb7cvjYs7YrhebJyM1K6GAnkKgfd/go-libp2p-swarm" ma "gx/ipfs/QmUxSEGbv2nmYNnfXi7839wwQqTN3kwQeUxe8dTjZWZs7J/go-multiaddr" peer "gx/ipfs/QmVf8hTAsLLFtn4WPCRNdnaF2Eag2qTBS6uR8AiHPZARXy/go-libp2p-peer" + inet "gx/ipfs/QmXdgNhVEgjLxjUoMs5ViQL7pboAt3Y7V7eGHRiE4qrmTE/go-libp2p-net" pstore "gx/ipfs/QmZhsmorLpD9kmQ4ynbAu4vbKv2goMUnXazwGA4gnWHDjB/go-libp2p-peerstore" iaddr "gx/ipfs/QmaKviZCLQrpuyFdSjteik7kJFcQpcyZgb1VuuwaCBBaEa/go-ipfs-addr" cmdkit "gx/ipfs/QmdE4gMduCKCGAcczM2F5ioYDfdeKuPix138wrES1YSr7f/go-ipfs-cmdkit" @@ -458,26 +459,38 @@ it will reconnect. output := make([]string, len(iaddrs)) for i, addr := range iaddrs { taddr := addr.Transport() - output[i] = "disconnect " + addr.ID().Pretty() + id := addr.ID() + output[i] = "disconnect " + id.Pretty() - found := false - conns := n.PeerHost.Network().ConnsToPeer(addr.ID()) - for _, conn := range conns { - if !conn.RemoteMultiaddr().Equal(taddr) { - continue - } + net := n.PeerHost.Network() - if err := conn.Close(); err != nil { + if taddr == nil { + if net.Connectedness(id) != inet.Connected { + output[i] += " failure: not connected" + } else if err := net.ClosePeer(id); err != nil { output[i] += " failure: " + err.Error() } else { output[i] += " success" } - found = true - break - } + } else { + found := false + for _, conn := range net.ConnsToPeer(id) { + if !conn.RemoteMultiaddr().Equal(taddr) { + continue + } - if !found { - output[i] += " failure: conn not found" + if err := conn.Close(); err != nil { + output[i] += " failure: " + err.Error() + } else { + output[i] += " success" + } + found = true + break + } + + if !found { + output[i] += " failure: conn not found" + } } } res.SetOutput(&stringList{output}) From 98a1c44489d7ffc0a4c9cd67365c6d0270ad4c19 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Tue, 12 Jun 2018 14:50:33 -0700 Subject: [PATCH 3/3] test swarm connect/disconnect License: MIT Signed-off-by: Steven Allen --- test/sharness/t0140-swarm.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/sharness/t0140-swarm.sh b/test/sharness/t0140-swarm.sh index 121240621..b9a215de5 100755 --- a/test/sharness/t0140-swarm.sh +++ b/test/sharness/t0140-swarm.sh @@ -97,4 +97,26 @@ test_expect_success "Addresses.NoAnnounce with /ipcidr affects addresses" ' test_kill_ipfs_daemon +test_expect_success "set up tcp testbed" ' + iptb init -n 2 -p 0 -f --bootstrap=none +' + +startup_cluster 2 + +test_expect_success "disconnect work without specifying a transport address" ' + [ $(ipfsi 0 swarm peers | wc -l) -eq 1 ] && + ipfsi 0 swarm disconnect "/ipfs/$(iptb get id 1)" && + [ $(ipfsi 0 swarm peers | wc -l) -eq 0 ] +' + +test_expect_success "connect work without specifying a transport address" ' + [ $(ipfsi 0 swarm peers | wc -l) -eq 0 ] && + ipfsi 0 swarm connect "/ipfs/$(iptb get id 1)" && + [ $(ipfsi 0 swarm peers | wc -l) -eq 1 ] +' + +test_expect_success "stopping cluster" ' + iptb stop +' + test_done