frostfs-node/pkg/services/tree/heap/unordered_slice.go
Evgenii Stratonikov 3601feab81 [#957] treesvc: Abstract out Heap interface for listing
```
goos: linux
goarch: amd64
pkg: git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/tree
cpu: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
                        │     old      │                 new                  │
                        │    sec/op    │    sec/op     vs base                │
GetSubTree/latency-8      3.542m ± 12%   4.059m ± 20%  +14.59% (p=0.005 n=10)
GetSubTree/total_time-8   73.19m ±  9%   78.82m ±  4%   +7.69% (p=0.043 n=10)
geomean                   16.10m         17.89m        +11.09%

                        │     old      │                 new                  │
                        │     B/op     │     B/op      vs base                │
GetSubTree/latency-8      28.23Mi ± 0%   32.81Mi ± 0%  +16.22% (p=0.000 n=10)
GetSubTree/total_time-8   28.23Mi ± 0%   32.81Mi ± 0%  +16.22% (p=0.000 n=10)
geomean                   28.23Mi        32.81Mi       +16.22%

                        │     old     │                new                 │
                        │  allocs/op  │  allocs/op   vs base               │
GetSubTree/latency-8      400.0k ± 0%   400.0k ± 0%  +0.00% (p=0.000 n=10)
GetSubTree/total_time-8   400.0k ± 0%   400.0k ± 0%  +0.00% (p=0.000 n=10)
geomean                   400.0k        400.0k       +0.00%
```

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
2024-02-06 10:14:35 +03:00

25 lines
482 B
Go

package heap
import (
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama"
)
type UnorderedSlice []pilorama.NodeInfo
func NewUnorderedSlice() *UnorderedSlice {
return &UnorderedSlice{}
}
func (s *UnorderedSlice) Insert(infos ...pilorama.NodeInfo) {
*s = append(*s, infos...)
}
func (s *UnorderedSlice) IsEmpty() bool {
return len(*s) == 0
}
func (s *UnorderedSlice) ExtractMin() pilorama.NodeInfo {
node := (*s)[0]
*s = (*s)[1:]
return node
}