[#1689] network,core/netmap: Replace Iterate*() functions with iterators
All checks were successful
Vulncheck / Vulncheck (push) Successful in 1m25s
Build / Build Components (push) Successful in 1m57s
Pre-commit hooks / Pre-commit (push) Successful in 1m58s
Tests and linters / Run gofumpt (push) Successful in 3m50s
Tests and linters / Staticcheck (push) Successful in 4m21s
Tests and linters / Lint (push) Successful in 4m25s
Tests and linters / gopls check (push) Successful in 4m27s
Tests and linters / Tests (push) Successful in 4m44s
OCI image / Build container images (push) Successful in 5m19s
Tests and linters / Tests with -race (push) Successful in 5m32s

Change-Id: I4842a3160d74c56d99ea9465d4be2f0662080605
Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
Evgenii Stratonikov 2025-04-04 20:31:35 +03:00
parent e65d578ba9
commit 2d1232ce6d
6 changed files with 33 additions and 27 deletions

View file

@ -3,7 +3,9 @@ package nodeconfig
import (
"fmt"
"io/fs"
"iter"
"os"
"slices"
"strconv"
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config"
@ -88,12 +90,8 @@ func Wallet(c *config.Config) *keys.PrivateKey {
type stringAddressGroup []string
func (x stringAddressGroup) IterateAddresses(f func(string) bool) {
for i := range x {
if f(x[i]) {
break
}
}
func (x stringAddressGroup) Addresses() iter.Seq[string] {
return slices.Values(x)
}
func (x stringAddressGroup) NumberOfAddresses() int {

View file

@ -3,6 +3,7 @@ package client
import (
"bytes"
"fmt"
"iter"
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/network"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client"
@ -19,7 +20,7 @@ func nodeInfoFromKeyAddr(dst *NodeInfo, k []byte, a, external network.AddressGro
// Args must not be nil.
func NodeInfoFromRawNetmapElement(dst *NodeInfo, info interface {
PublicKey() []byte
IterateAddresses(func(string) bool)
Addresses() iter.Seq[string]
NumberOfAddresses() int
ExternalAddresses() []string
},

View file

@ -1,6 +1,10 @@
package netmap
import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
import (
"iter"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
)
// Node is a named type of netmap.NodeInfo which provides interface needed
// in the current repository. Node is expected to be used everywhere instead
@ -14,8 +18,14 @@ func (x Node) PublicKey() []byte {
return (netmap.NodeInfo)(x).PublicKey()
}
// Addresses returns an iterator over all announced network addresses.
func (x Node) Addresses() iter.Seq[string] {
return (netmap.NodeInfo)(x).NetworkEndpoints()
}
// IterateAddresses iterates over all announced network addresses
// and passes them into f. Handler MUST NOT be nil.
// Deprecated: use [Node.Addresses] instead.
func (x Node) IterateAddresses(f func(string) bool) {
for s := range (netmap.NodeInfo)(x).NetworkEndpoints() {
if f(s) {

View file

@ -3,6 +3,7 @@ package network
import (
"errors"
"fmt"
"iter"
"slices"
"sort"
@ -68,9 +69,8 @@ func (x AddressGroup) Swap(i, j int) {
// MultiAddressIterator is an interface of network address group.
type MultiAddressIterator interface {
// IterateAddresses must iterate over network addresses and pass each one
// to the handler until it returns true.
IterateAddresses(func(string) bool)
// Addresses must return an iterator over network addresses.
Addresses() iter.Seq[string]
// NumberOfAddresses must return number of addresses in group.
NumberOfAddresses() int
@ -131,19 +131,19 @@ func (x *AddressGroup) FromIterator(iter MultiAddressIterator) error {
// iterateParsedAddresses parses each address from MultiAddressIterator and passes it to f
// until 1st parsing failure or f's error.
func iterateParsedAddresses(iter MultiAddressIterator, f func(s Address) error) (err error) {
iter.IterateAddresses(func(s string) bool {
for s := range iter.Addresses() {
var a Address
err = a.FromString(s)
if err != nil {
err = fmt.Errorf("could not parse address from string: %w", err)
return true
return fmt.Errorf("could not parse address from string: %w", err)
}
err = f(a)
return err != nil
})
if err != nil {
return err
}
}
return
}

View file

@ -1,6 +1,8 @@
package network
import (
"iter"
"slices"
"sort"
"testing"
@ -58,10 +60,8 @@ func TestAddressGroup_FromIterator(t *testing.T) {
type testIterator []string
func (t testIterator) IterateAddresses(f func(string) bool) {
for i := range t {
f(t[i])
}
func (t testIterator) Addresses() iter.Seq[string] {
return slices.Values(t)
}
func (t testIterator) NumberOfAddresses() int {

View file

@ -2,6 +2,7 @@ package network
import (
"errors"
"iter"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
)
@ -34,12 +35,8 @@ var (
// MultiAddressIterator.
type NodeEndpointsIterator netmap.NodeInfo
func (x NodeEndpointsIterator) IterateAddresses(f func(string) bool) {
for s := range (netmap.NodeInfo)(x).NetworkEndpoints() {
if f(s) {
return
}
}
func (x NodeEndpointsIterator) Addresses() iter.Seq[string] {
return (netmap.NodeInfo)(x).NetworkEndpoints()
}
func (x NodeEndpointsIterator) NumberOfAddresses() int {