Skip to content

Commit

Permalink
feat: add options to cached addr book
Browse files Browse the repository at this point in the history
fix test by allowing private ips
  • Loading branch information
2color committed Nov 28, 2024
1 parent a20a4c3 commit c5f1d62
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 13 deletions.
38 changes: 30 additions & 8 deletions cached_addr_book.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,17 +50,35 @@ type peerState struct {
}

type cachedAddrBook struct {
addrBook peerstore.AddrBook
peers map[peer.ID]*peerState
mu sync.RWMutex // Add mutex for thread safety
isProbing bool
addrBook peerstore.AddrBook
peers map[peer.ID]*peerState
mu sync.RWMutex // Add mutex for thread safety
isProbing bool
allowPrivateIPs bool // for testing
}

func newCachedAddrBook() *cachedAddrBook {
return &cachedAddrBook{
type AddrBookOption func(*cachedAddrBook) error

func WithAllowPrivateIPs() AddrBookOption {
return func(cab *cachedAddrBook) error {
cab.allowPrivateIPs = true
return nil
}
}

func newCachedAddrBook(opts ...AddrBookOption) (*cachedAddrBook, error) {
cab := &cachedAddrBook{
peers: make(map[peer.ID]*peerState),
addrBook: pstoremem.NewAddrBook(),
}

for _, opt := range opts {
err := opt(cab)
if err != nil {
return nil, err
}

Check warning on line 79 in cached_addr_book.go

View check run for this annotation

Codecov / codecov/patch

cached_addr_book.go#L78-L79

Added lines #L78 - L79 were not covered by tests
}
return cab, nil
}

func (cab *cachedAddrBook) background(ctx context.Context, host host.Host) {
Expand Down Expand Up @@ -149,7 +167,8 @@ func (cab *cachedAddrBook) probePeers(ctx context.Context, host host.Host) {
semaphore := make(chan struct{}, MaxConcurrentProbes)

for i, p := range cab.addrBook.PeersWithAddrs() {
if host.Network().Connectedness(p) == network.Connected || host.Network().Connectedness(p) == network.Limited {
connectedness := host.Network().Connectedness(p)
if connectedness == network.Connected || connectedness == network.Limited {
continue // don't probe connected peers

Check warning on line 172 in cached_addr_book.go

View check run for this annotation

Codecov / codecov/patch

cached_addr_book.go#L172

Added line #L172 was not covered by tests
}

Expand All @@ -164,7 +183,10 @@ func (cab *cachedAddrBook) probePeers(ctx context.Context, host host.Host) {
}

addrs := cab.addrBook.Addrs(p)
addrs = ma.FilterAddrs(addrs, manet.IsPublicAddr)

if !cab.allowPrivateIPs {
addrs = ma.FilterAddrs(addrs, manet.IsPublicAddr)
}

Check warning on line 189 in cached_addr_book.go

View check run for this annotation

Codecov / codecov/patch

cached_addr_book.go#L188-L189

Added lines #L188 - L189 were not covered by tests

if len(addrs) == 0 {
continue // no addresses to probe

Check warning on line 192 in cached_addr_book.go

View check run for this annotation

Codecov / codecov/patch

cached_addr_book.go#L192

Added line #L192 was not covered by tests
Expand Down
12 changes: 8 additions & 4 deletions cached_addr_book_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@ import (

func TestCachedAddrBook(t *testing.T) {
// Create a new cached address book
cab := newCachedAddrBook()
cab, err := newCachedAddrBook(WithAllowPrivateIPs())
require.NoError(t, err)
require.NotNil(t, cab)
require.NotNil(t, cab.peers)
require.NotNil(t, cab.addrBook)
}

func TestGetCachedAddrs(t *testing.T) {
cab := newCachedAddrBook()
cab, err := newCachedAddrBook(WithAllowPrivateIPs())
require.NoError(t, err)

// Create a test peer with new PeerID
testPeer, err := peer.Decode("12D3KooWCZ67sU8oCvKd82Y6c9NgpqgoZYuZEUcg4upHCjK3n1aj")
Expand Down Expand Up @@ -59,7 +61,8 @@ func TestBackground(t *testing.T) {
require.NoError(t, err)
defer em.Close()

cab := newCachedAddrBook()
cab, err := newCachedAddrBook(WithAllowPrivateIPs())
require.NoError(t, err)

// Create a channel to signal when background processing is ready
ready := make(chan struct{})
Expand Down Expand Up @@ -135,7 +138,8 @@ func TestProbePeers(t *testing.T) {
require.NoError(t, err)
defer h.Close()

cab := newCachedAddrBook()
cab, err := newCachedAddrBook(WithAllowPrivateIPs())
require.NoError(t, err)

// Add a test peer with some addresses
testPeer, _ := peer.Decode("12D3KooWCZ67sU8oCvKd82Y6c9NgpqgoZYuZEUcg4upHCjK3n1aj")
Expand Down
5 changes: 4 additions & 1 deletion server.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,10 @@ func start(ctx context.Context, cfg *config) error {

if cfg.cachedAddrBook {
fmt.Println("Using cached address book to speed up peer discovery")
cachedAddrBook = newCachedAddrBook()
cachedAddrBook, err = newCachedAddrBook()
if err != nil {
return err
}
go cachedAddrBook.background(ctx, h)

Check warning on line 92 in server.go

View check run for this annotation

Codecov / codecov/patch

server.go#L84-L92

Added lines #L84 - L92 were not covered by tests
}

Expand Down

0 comments on commit c5f1d62

Please sign in to comment.