From 2cbc585edd799c2c1536270de12d849337b07630 Mon Sep 17 00:00:00 2001 From: Dmitrii Stepanov Date: Tue, 28 Feb 2023 14:04:02 +0300 Subject: [PATCH] [TrueCloudLab/hrw#2] sdk-go: Use typed HRW methods Update HRW pkg and use typed HRW methods to sort nodes Signed-off-by: Dmitrii Stepanov --- go.mod | 2 +- go.sum | 2 ++ netmap/netmap.go | 2 +- netmap/selector.go | 4 ++-- netmap/selector_test.go | 4 ++-- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 2532af8e..955f0ed3 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.18 require ( github.com/TrueCloudLab/frostfs-api-go/v2 v2.0.0-20221212144048-1351b6656d68 github.com/TrueCloudLab/frostfs-contract v0.0.0-20221213081248-6c805c1b4e42 - github.com/TrueCloudLab/hrw v1.1.0 + github.com/TrueCloudLab/hrw v1.1.1-0.20230227111858-79b208bebf52 github.com/TrueCloudLab/tzhash v1.7.0 github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20221202181307-76fa05c21b12 github.com/google/uuid v1.3.0 diff --git a/go.sum b/go.sum index e5f78a03..269dc6f3 100644 --- a/go.sum +++ b/go.sum @@ -45,6 +45,8 @@ github.com/TrueCloudLab/frostfs-crypto v0.5.0 h1:ZoLjixSkQv3j1EwZ1WJzMEJY2NR+9nO github.com/TrueCloudLab/frostfs-crypto v0.5.0/go.mod h1:775MUewpH8AWpXrimAG2NYWOXB6lpKOI5kqgu+eI5zs= github.com/TrueCloudLab/hrw v1.1.0 h1:2U69PpUX1UtMWgh/RAg6D8mQW+/WsxbLNE+19EUhLhY= github.com/TrueCloudLab/hrw v1.1.0/go.mod h1:Pzi8Hy3qx12cew+ajVxgbtDVM4sRG9/gJnJLcL/yRyY= +github.com/TrueCloudLab/hrw v1.1.1-0.20230227111858-79b208bebf52 h1:fBeG0EkL7Pa2D0SIiZt3yQYGpP/IvrXg4xEPAZ4Jjys= +github.com/TrueCloudLab/hrw v1.1.1-0.20230227111858-79b208bebf52/go.mod h1:BG6NztCuNc0UFr6MWJ4MM1sUl9lxx6PBRwLmTxdre20= github.com/TrueCloudLab/rfc6979 v0.3.0 h1:0SYMAfQWh/TjnofqYQHy+s3rmQ5gi0fvOaDbqd60/Ic= github.com/TrueCloudLab/rfc6979 v0.3.0/go.mod h1:qylxFXFQ/sMvpZC/8JyWp+mfzk5Zj/KDT5FAbekhobc= github.com/TrueCloudLab/tzhash v1.7.0 h1:btGORepc7Dg+n4MxgJxv73c9eYhwSBI5HqsqUBRmJiw= diff --git a/netmap/netmap.go b/netmap/netmap.go index 75451f00..2626ad91 100644 --- a/netmap/netmap.go +++ b/netmap/netmap.go @@ -152,7 +152,7 @@ func (m NetMap) PlacementVectors(vectors [][]NodeInfo, pivot []byte) ([][]NodeIn for i := range vectors { result[i] = make([]NodeInfo, len(vectors[i])) copy(result[i], vectors[i]) - hrw.SortSliceByWeightValue(result[i], nodes(result[i]).weights(wf), h) + hrw.SortHasherSliceByWeightValue(result[i], nodes(result[i]).weights(wf), h) } return result, nil diff --git a/netmap/selector.go b/netmap/selector.go index 370cf10e..3e1d3212 100644 --- a/netmap/selector.go +++ b/netmap/selector.go @@ -108,7 +108,7 @@ func (c *context) getSelection(p PlacementPolicy, s netmap.Selector) ([]nodes, e weights[i] = calcBucketWeight(res[i], newMeanIQRAgg(), c.weightFunc) } - hrw.SortSliceByWeightValue(res, weights, c.hrwSeedHash) + hrw.SortHasherSliceByWeightValue(res, weights, c.hrwSeedHash) } if s.GetAttribute() == "" { @@ -164,7 +164,7 @@ func (c *context) getSelectionBase(subnetID subnetid.ID, s netmap.Selector) []no if len(c.hrwSeed) != 0 { for i := range result { - hrw.SortSliceByWeightValue(result[i].nodes, result[i].nodes.weights(c.weightFunc), c.hrwSeedHash) + hrw.SortHasherSliceByWeightValue(result[i].nodes, result[i].nodes.weights(c.weightFunc), c.hrwSeedHash) } } diff --git a/netmap/selector_test.go b/netmap/selector_test.go index 96d9b21d..936cfedc 100644 --- a/netmap/selector_test.go +++ b/netmap/selector_test.go @@ -50,7 +50,7 @@ func BenchmarkHRWSort(b *testing.B) { copy(realNodes, vectors) b.StartTimer() - hrw.SortSliceByValue(realNodes, pivot) + hrw.SortHasherSliceByValue(realNodes, pivot) } }) b.Run("only sort by index", func(b *testing.B) { @@ -72,7 +72,7 @@ func BenchmarkHRWSort(b *testing.B) { copy(realNodes, vectors) b.StartTimer() - hrw.SortSliceByWeightValue(realNodes, weights, pivot) + hrw.SortHasherSliceByWeightValue(realNodes, weights, pivot) } }) b.Run("sort by ID, then by index (deterministic)", func(b *testing.B) {