Commit 68d4cf29 authored by acud's avatar acud Committed by GitHub

feat(kademlia): AddPeers batch on Start (#2162)

parent 982d73c3
......@@ -26,6 +26,8 @@ type Interface interface {
Remover
// Overlays returns a list of all overlay addresses saved in addressbook.
Overlays() ([]swarm.Address, error)
// IterateOverlays exposes overlays in a form of an iterator.
IterateOverlays(func(swarm.Address) (bool, error)) error
// Addresses returns a list of all bzz.Address-es saved in addressbook.
Addresses() ([]bzz.Address, error)
}
......@@ -84,8 +86,8 @@ func (s *store) Remove(overlay swarm.Address) error {
return s.store.Delete(keyPrefix + overlay.String())
}
func (s *store) Overlays() (overlays []swarm.Address, err error) {
err = s.store.Iterate(keyPrefix, func(key, _ []byte) (stop bool, err error) {
func (s *store) IterateOverlays(cb func(swarm.Address) (bool, error)) error {
return s.store.Iterate(keyPrefix, func(key, _ []byte) (stop bool, err error) {
k := string(key)
if !strings.HasPrefix(k, keyPrefix) {
return true, nil
......@@ -98,6 +100,19 @@ func (s *store) Overlays() (overlays []swarm.Address, err error) {
if err != nil {
return true, err
}
stop, err = cb(addr)
if err != nil {
return true, err
}
if stop {
return true, nil
}
return false, nil
})
}
func (s *store) Overlays() (overlays []swarm.Address, err error) {
err = s.IterateOverlays(func(addr swarm.Address) (stop bool, err error) {
overlays = append(overlays, addr)
return false, nil
})
......
......@@ -34,6 +34,8 @@ const (
maxBootNodeAttempts = 3 // how many attempts to dial to boot-nodes before giving up
defaultBitSuffixLength = 3 // the number of bits used to create pseudo addresses for balancing
addPeerBatchSize = 500
peerConnectionAttemptTimeout = 5 * time.Second // Timeout for establishing a new connection with peer.
)
......@@ -577,9 +579,19 @@ func (k *Kad) Start(_ context.Context) error {
return
default:
}
var (
start = time.Now()
addresses []swarm.Address
)
start := time.Now()
addresses, err := k.addressBook.Overlays()
err := k.addressBook.IterateOverlays(func(addr swarm.Address) (stop bool, err error) {
addresses = append(addresses, addr)
if len(addresses) == addPeerBatchSize {
k.AddPeers(addresses...)
addresses = nil
}
return false, nil
})
if err != nil {
k.logger.Errorf("addressbook overlays: %w", err)
return
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment