diff --git a/core/node/libp2p/addrs.go b/core/node/libp2p/addrs.go index 06aa059a4eaa..827c6cc4c9d8 100644 --- a/core/node/libp2p/addrs.go +++ b/core/node/libp2p/addrs.go @@ -26,7 +26,8 @@ func AddrFilters(filters []string) func() (*ma.Filters, Libp2pOpts, error) { } func makeAddrsFactory(announce []string, appendAnnouce []string, noAnnounce []string) (p2pbhost.AddrsFactory, error) { - var err error // To assign to the slice in the for loop + var err error // To assign to the slice in the for loop + existing := make(map[string]bool) // To avoid duplicates annAddrs := make([]ma.Multiaddr, len(announce)) for i, addr := range announce { @@ -34,14 +35,20 @@ func makeAddrsFactory(announce []string, appendAnnouce []string, noAnnounce []st if err != nil { return nil, err } + existing[addr] = true } - appendAnnAddrs := make([]ma.Multiaddr, len(appendAnnouce)) - for i, addr := range appendAnnouce { - appendAnnAddrs[i], err = ma.NewMultiaddr(addr) + var appendAnnAddrs []ma.Multiaddr + for _, addr := range appendAnnouce { + if existing[addr] { + // skip AppendAnnounce that is on the Announce list already + continue + } + appendAddr, err := ma.NewMultiaddr(addr) if err != nil { return nil, err } + appendAnnAddrs = append(appendAnnAddrs, appendAddr) } filters := ma.NewFilters() diff --git a/test/sharness/t0140-swarm.sh b/test/sharness/t0140-swarm.sh index 04a4c8f3a932..9380ea93a19f 100755 --- a/test/sharness/t0140-swarm.sh +++ b/test/sharness/t0140-swarm.sh @@ -65,9 +65,16 @@ test_expect_success 'Addresses.Announce affects addresses' ' test_kill_ipfs_daemon -announceCfg='["/dnsaddr/dynamic.example.com", "/ip4/10.20.30.40/tcp/4321"]' -test_expect_success "test_config_set AppendAnnounce succeeds" " - ipfs config --json Addresses.AppendAnnounce '$announceCfg' + +announceCfg='["/ip4/127.0.0.1/tcp/4001", "/ip4/1.2.3.4/tcp/1234"]' +test_expect_success "test_config_set succeeds" " + ipfs config --json Addresses.Announce '$announceCfg' +" +# Include "/ip4/1.2.3.4/tcp/1234" to ensure we deduplicate addrs already present in Append +appendAnnounceCfg='["/dnsaddr/dynamic.example.com", "/ip4/10.20.30.40/tcp/4321", "/ip4/1.2.3.4/tcp/1234"]' +test_expect_success "test_config_set Append and AppendAnnounce succeeds" " + ipfs config --json Addresses.Announce '$announceCfg' && + ipfs config --json Addresses.AppendAnnounce '$appendAnnounceCfg' " test_launch_ipfs_daemon