Feat #1374: ipfshttp: do not swarm connect to more than 10 origins.

Disallow silly behaviours by default.
This commit is contained in:
Hector Sanjuan 2021-07-02 02:20:39 +02:00
parent 625b344cb7
commit 1952693ab5
2 changed files with 13 additions and 12 deletions

View File

@ -326,12 +326,15 @@ func (ipfs *Connector) Pin(ctx context.Context, pin *api.Pin) error {
ctx, cancelRequest := context.WithCancel(ctx)
defer cancelRequest()
// If the pin has origins, tell ipfs to connect
for _, orig := range pin.Origins {
// Attempt to connect to a maximum of 10 origins,
// in the background, ignoring errors.
logger.Debugf("swarm-connect to origin before pinning: %s", orig)
// If the pin has origins, tell ipfs to connect to a maximum of 10.
bound := len(pin.Origins)
if bound > 10 {
bound = 10
}
for _, orig := range pin.Origins[0:bound] {
// do it in the background, ignoring errors.
go func(o string) {
logger.Debugf("swarm-connect to origin before pinning: %s", o)
_, err := ipfs.postCtx(
ctx,
fmt.Sprintf("swarm/connect?arg=%s", o),
@ -342,7 +345,7 @@ func (ipfs *Connector) Pin(ctx context.Context, pin *api.Pin) error {
logger.Debug(err)
return
}
logger.Debugf("swarm-connect success to origin: %s", orig)
logger.Debugf("swarm-connect success to origin: %s", o)
}(url.QueryEscape(orig.String()))
}

View File

@ -8,7 +8,6 @@ import (
"time"
logging "github.com/ipfs/go-log/v2"
"github.com/multiformats/go-multiaddr"
ma "github.com/multiformats/go-multiaddr"
merkledag "github.com/ipfs/go-merkledag"
@ -22,8 +21,7 @@ func init() {
func testIPFSConnector(t *testing.T) (*Connector, *test.IpfsMock) {
mock := test.NewIpfsMock(t)
nodeMAddr, _ := ma.NewMultiaddr(fmt.Sprintf("/ip4/%s/tcp/%d",
mock.Addr, mock.Port))
nodeMAddr := ma.StringCast(fmt.Sprintf("/ip4/%s/tcp/%d", mock.Addr, mock.Port))
cfg := &Config{}
cfg.Default()
@ -77,9 +75,9 @@ func TestPin(t *testing.T) {
defer ipfs.Shutdown(ctx)
pin := api.PinCid(test.Cid1)
pin.Origins = []multiaddr.Multiaddr{
multiaddr.StringCast("/ip4/1.2.3.4/tcp/1234/p2p/12D3KooWKewdAMAU3WjYHm8qkAJc5eW6KHbHWNigWraXXtE1UCng"),
multiaddr.StringCast("/ip4/2.3.3.4/tcp/1234/p2p/12D3KooWF6BgwX966ge5AVFs9Gd2wVTBmypxZVvaBR12eYnUmXkR"),
pin.Origins = []ma.Multiaddr{
ma.StringCast("/ip4/1.2.3.4/tcp/1234/p2p/12D3KooWKewdAMAU3WjYHm8qkAJc5eW6KHbHWNigWraXXtE1UCng"),
ma.StringCast("/ip4/2.3.3.4/tcp/1234/p2p/12D3KooWF6BgwX966ge5AVFs9Gd2wVTBmypxZVvaBR12eYnUmXkR"),
}
err := ipfs.Pin(ctx, pin)
if err != nil {