From 6e5d7f84afdc2764d4e72af5a4e42badd57231de Mon Sep 17 00:00:00 2001 From: Leonard Lyubich Date: Tue, 22 Jun 2021 13:25:44 +0300 Subject: [PATCH] [#607] network: Generalize LocalAddressSource to address group Make `LocalAddressSource.LocalAddress` method to return `AddressGroup`. Make `IsLocalAddress` function to accept parameter of type `AddressGroup`. Adopt the application code with temporary `GroupFromAddress` helper. Signed-off-by: Leonard Lyubich --- cmd/neofs-node/config.go | 6 +++--- cmd/neofs-node/container.go | 2 +- cmd/neofs-node/reputation/common/remote.go | 2 +- pkg/network/address.go | 10 +++++----- pkg/services/object/put/streamer.go | 4 ++-- pkg/services/object/util/placement.go | 4 ++-- pkg/services/policer/check.go | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/cmd/neofs-node/config.go b/cmd/neofs-node/config.go index ddd3f1cb8..b77a02721 100644 --- a/cmd/neofs-node/config.go +++ b/cmd/neofs-node/config.go @@ -90,7 +90,7 @@ type cfg struct { cfgNodeInfo cfgNodeInfo - localAddr network.Address + localAddr network.AddressGroup cfgObject cfgObject @@ -285,7 +285,7 @@ func initCfg(path string) *cfg { tlsCertFile: tlsCertFile, tlsKeyFile: tlsKeyFile, }, - localAddr: netAddr, + localAddr: network.GroupFromAddress(netAddr), respSvc: response.NewService( response.WithNetworkState(state), ), @@ -308,7 +308,7 @@ func initCfg(path string) *cfg { return c } -func (c *cfg) LocalAddress() network.Address { +func (c *cfg) LocalAddress() network.AddressGroup { return c.localAddr } diff --git a/cmd/neofs-node/container.go b/cmd/neofs-node/container.go index daa98bc06..514613c0d 100644 --- a/cmd/neofs-node/container.go +++ b/cmd/neofs-node/container.go @@ -225,7 +225,7 @@ func (r *remoteLoadAnnounceProvider) InitRemote(srv loadroute.ServerInfo) (loadc return nil, fmt.Errorf("could not convert address to IP format: %w", err) } - if network.IsLocalAddress(r.loadAddrSrc, netAddr) { + if network.IsLocalAddress(r.loadAddrSrc, network.GroupFromAddress(netAddr)) { // if local => return no-op writer return loadcontroller.SimpleWriterProvider(new(nopLoadWriter)), nil } diff --git a/cmd/neofs-node/reputation/common/remote.go b/cmd/neofs-node/reputation/common/remote.go index cd08ae062..fec8f0768 100644 --- a/cmd/neofs-node/reputation/common/remote.go +++ b/cmd/neofs-node/reputation/common/remote.go @@ -79,7 +79,7 @@ func (rtp *remoteTrustProvider) InitRemote(srv reputationcommon.ServerInfo) (rep return nil, fmt.Errorf("could not convert address to IP format: %w", err) } - if network.IsLocalAddress(rtp.localAddrSrc, netAddr) { + if network.IsLocalAddress(rtp.localAddrSrc, network.GroupFromAddress(netAddr)) { // if local => return no-op writer return trustcontroller.SimpleWriterProvider(new(NopReputationWriter)), nil } diff --git a/pkg/network/address.go b/pkg/network/address.go index b18987ffb..3a34a0cf3 100644 --- a/pkg/network/address.go +++ b/pkg/network/address.go @@ -25,7 +25,7 @@ type Address struct { // LocalAddressSource is an interface of local // network address container with read access. type LocalAddressSource interface { - LocalAddress() Address + LocalAddress() AddressGroup } // String returns multiaddr string. @@ -107,8 +107,8 @@ func multiaddrStringFromHostAddr(host string) (string, error) { return strings.Join([]string{prefix, addr, l4Protocol, port}, "/"), nil } -// IsLocalAddress returns true if network endpoint from local address -// source is equal to network endpoint of passed address. -func IsLocalAddress(src LocalAddressSource, addr Address) bool { - return src.LocalAddress().Equal(addr) +// IsLocalAddress returns true if network endpoints from local address group +// source intersects with network endpoints of passed address group. +func IsLocalAddress(src LocalAddressSource, addr AddressGroup) bool { + return src.LocalAddress().Intersects(addr) } diff --git a/pkg/services/object/put/streamer.go b/pkg/services/object/put/streamer.go index 3d607da35..675f9aa47 100644 --- a/pkg/services/object/put/streamer.go +++ b/pkg/services/object/put/streamer.go @@ -150,7 +150,7 @@ func (p *Streamer) newCommonTarget(prm *PutInitPrm) transformer.ObjectTarget { var relay func(network.Address) error if p.relay != nil { relay = func(addr network.Address) error { - if network.IsLocalAddress(p.localAddrSrc, addr) { + if network.IsLocalAddress(p.localAddrSrc, network.GroupFromAddress(addr)) { return errLocalAddress } @@ -167,7 +167,7 @@ func (p *Streamer) newCommonTarget(prm *PutInitPrm) transformer.ObjectTarget { traverseOpts: prm.traverseOpts, workerPool: p.workerPool, nodeTargetInitializer: func(addr network.Address) transformer.ObjectTarget { - if network.IsLocalAddress(p.localAddrSrc, addr) { + if network.IsLocalAddress(p.localAddrSrc, network.GroupFromAddress(addr)) { return &localTarget{ storage: p.localStore, } diff --git a/pkg/services/object/util/placement.go b/pkg/services/object/util/placement.go index e7a9b4234..9fca0ec01 100644 --- a/pkg/services/object/util/placement.go +++ b/pkg/services/object/util/placement.go @@ -58,7 +58,7 @@ func (p *localPlacement) BuildPlacement(addr *object.Address, policy *netmapSDK. continue } - if network.IsLocalAddress(p.localAddrSrc, addr) { + if network.IsLocalAddress(p.localAddrSrc, network.GroupFromAddress(addr)) { return []netmapSDK.Nodes{{vs[i][j]}}, nil } } @@ -92,7 +92,7 @@ func (p *remotePlacement) BuildPlacement(addr *object.Address, policy *netmapSDK continue } - if network.IsLocalAddress(p.localAddrSrc, addr) { + if network.IsLocalAddress(p.localAddrSrc, network.GroupFromAddress(addr)) { vs[i] = append(vs[i][:j], vs[i][j+1:]...) j-- } diff --git a/pkg/services/policer/check.go b/pkg/services/policer/check.go index 800d28459..76f9103e7 100644 --- a/pkg/services/policer/check.go +++ b/pkg/services/policer/check.go @@ -70,7 +70,7 @@ func (p *Policer) processNodes(ctx context.Context, addr *object.Address, nodes continue } - if network.IsLocalAddress(p.localAddrSrc, node) { + if network.IsLocalAddress(p.localAddrSrc, network.GroupFromAddress(node)) { if shortage == 0 { // we can call the redundant copy callback // here to slightly improve the performance