From fb999fecac413a63cd2d7fb3058db3dc913d705c Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Sat, 5 Apr 2025 11:35:42 +0300 Subject: [PATCH] [#357] netmap: Provide slice to append to in flattenNodes() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ``` 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 --- netmap/netmap.go | 22 +++++++--------------- netmap/selector_test.go | 2 +- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/netmap/netmap.go b/netmap/netmap.go index b119f07..a583455 100644 --- a/netmap/netmap.go +++ b/netmap/netmap.go @@ -139,20 +139,12 @@ func (n nodes) appendWeightsTo(wf weightFunc, w []float64) []float64 { return w } -func flattenNodes(ns []nodes) nodes { - var sz, i int - - for i = range ns { - sz += len(ns[i]) - } - - result := make(nodes, 0, sz) - +// flattenNodes flattens ns nested list and appends the result to the target slice. +func flattenNodes(target nodes, ns []nodes) nodes { for i := range ns { - result = append(result, ns[i]...) + target = append(target, ns[i]...) } - - return result + return target } // 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 } - result[i] = append(result[i], flattenNodes(nodes)...) + result[i] = flattenNodes(result[i], nodes) if unique { c.addUsedNodes(result[i]...) @@ -304,14 +296,14 @@ func (m NetMap) ContainerNodes(p PlacementPolicy, pivot []byte) ([][]NodeInfo, e if err != nil { return nil, err } - result[i] = append(result[i], flattenNodes(nodes)...) + result[i] = flattenNodes(result[i], nodes) c.addUsedNodes(result[i]...) } else { nodes, ok := c.selections[sName] if !ok { return nil, fmt.Errorf("selector not found: REPLICA '%s'", sName) } - result[i] = append(result[i], flattenNodes(nodes)...) + result[i] = flattenNodes(result[i], nodes) } } diff --git a/netmap/selector_test.go b/netmap/selector_test.go index ae996dd..a4ca774 100644 --- a/netmap/selector_test.go +++ b/netmap/selector_test.go @@ -191,7 +191,7 @@ func TestPlacementPolicy_DeterministicOrder(t *testing.T) { nss[i] = v[i] } - ns := flattenNodes(nss) + ns := flattenNodes(nil, nss) require.Equal(t, 2, len(ns)) return ns[0].Hash(), ns[1].Hash() }