[#357] netmap: Provide slice to append to in flattenNodes()
All checks were successful
Code generation / Generate proto (pull_request) Successful in 33s
DCO / DCO (pull_request) Successful in 41s
Tests and linters / Tests (pull_request) Successful in 1m9s
Tests and linters / Lint (pull_request) Successful in 2m11s

```
goos: linux
goarch: amd64
pkg: git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap
cpu: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
                                                              │     old     │                new                 │
                                                              │   sec/op    │   sec/op     vs base               │
Netmap_ContainerNodes/REP_2-8                                   5.867µ ± 1%   5.821µ ± 0%  -0.79% (p=0.000 n=10)
Netmap_ContainerNodes/REP_2_IN_X_CBF_2_SELECT_2_FROM_*_AS_X-8   5.786µ ± 2%   5.810µ ± 1%       ~ (p=1.000 n=10)
geomean                                                         5.826µ        5.815µ       -0.19%

                                                              │     old      │                 new                 │
                                                              │     B/op     │     B/op      vs base               │
Netmap_ContainerNodes/REP_2-8                                   7.609Ki ± 0%   7.328Ki ± 0%  -3.70% (p=0.000 n=10)
Netmap_ContainerNodes/REP_2_IN_X_CBF_2_SELECT_2_FROM_*_AS_X-8   7.031Ki ± 0%   6.859Ki ± 0%  -2.44% (p=0.000 n=10)
geomean                                                         7.315Ki        7.090Ki       -3.07%

                                                              │    old     │                 new                 │
                                                              │ allocs/op  │ allocs/op   vs base                 │
Netmap_ContainerNodes/REP_2-8                                   77.00 ± 0%   77.00 ± 0%       ~ (p=1.000 n=10) ¹
Netmap_ContainerNodes/REP_2_IN_X_CBF_2_SELECT_2_FROM_*_AS_X-8   77.00 ± 0%   77.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                                         77.00        77.00       +0.00%
¹ all samples are equal
```

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
Evgenii Stratonikov 2025-04-05 11:35:42 +03:00
parent 6458c11e83
commit fb999fecac
Signed by: fyrchik
SSH key fingerprint: SHA256:m/TTwCzjnRkXgnzEx9X92ccxy1CcVeinOgDb3NPWWmg
2 changed files with 8 additions and 16 deletions

View file

@ -139,20 +139,12 @@ func (n nodes) appendWeightsTo(wf weightFunc, w []float64) []float64 {
return w return w
} }
func flattenNodes(ns []nodes) nodes { // flattenNodes flattens ns nested list and appends the result to the target slice.
var sz, i int func flattenNodes(target nodes, ns []nodes) nodes {
for i = range ns {
sz += len(ns[i])
}
result := make(nodes, 0, sz)
for i := range ns { for i := range ns {
result = append(result, ns[i]...) target = append(target, ns[i]...)
} }
return target
return result
} }
// PlacementVectors sorts container nodes returned by ContainerNodes method // PlacementVectors sorts container nodes returned by ContainerNodes method
@ -287,7 +279,7 @@ func (m NetMap) ContainerNodes(p PlacementPolicy, pivot []byte) ([][]NodeInfo, e
return nil, err return nil, err
} }
result[i] = append(result[i], flattenNodes(nodes)...) result[i] = flattenNodes(result[i], nodes)
if unique { if unique {
c.addUsedNodes(result[i]...) c.addUsedNodes(result[i]...)
@ -304,14 +296,14 @@ func (m NetMap) ContainerNodes(p PlacementPolicy, pivot []byte) ([][]NodeInfo, e
if err != nil { if err != nil {
return nil, err return nil, err
} }
result[i] = append(result[i], flattenNodes(nodes)...) result[i] = flattenNodes(result[i], nodes)
c.addUsedNodes(result[i]...) c.addUsedNodes(result[i]...)
} else { } else {
nodes, ok := c.selections[sName] nodes, ok := c.selections[sName]
if !ok { if !ok {
return nil, fmt.Errorf("selector not found: REPLICA '%s'", sName) return nil, fmt.Errorf("selector not found: REPLICA '%s'", sName)
} }
result[i] = append(result[i], flattenNodes(nodes)...) result[i] = flattenNodes(result[i], nodes)
} }
} }

View file

@ -191,7 +191,7 @@ func TestPlacementPolicy_DeterministicOrder(t *testing.T) {
nss[i] = v[i] nss[i] = v[i]
} }
ns := flattenNodes(nss) ns := flattenNodes(nil, nss)
require.Equal(t, 2, len(ns)) require.Equal(t, 2, len(ns))
return ns[0].Hash(), ns[1].Hash() return ns[0].Hash(), ns[1].Hash()
} }