mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
tsdb: Avoid potential overflow in SortFunc
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
This commit is contained in:
parent
27d0e12f32
commit
26d07ee8d3
27
tsdb/db.go
27
tsdb/db.go
|
@ -631,7 +631,14 @@ func (db *DBReadOnly) Blocks() ([]BlockReader, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
slices.SortFunc(loadable, func(a, b *Block) int {
|
slices.SortFunc(loadable, func(a, b *Block) int {
|
||||||
return int(a.Meta().MinTime - b.Meta().MinTime)
|
switch {
|
||||||
|
case a.Meta().MinTime < b.Meta().MinTime:
|
||||||
|
return -1
|
||||||
|
case a.Meta().MinTime > b.Meta().MinTime:
|
||||||
|
return 1
|
||||||
|
default:
|
||||||
|
return 0
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
blockMetas := make([]BlockMeta, 0, len(loadable))
|
blockMetas := make([]BlockMeta, 0, len(loadable))
|
||||||
|
@ -1507,7 +1514,14 @@ func (db *DB) reloadBlocks() (err error) {
|
||||||
db.metrics.blocksBytes.Set(float64(blocksSize))
|
db.metrics.blocksBytes.Set(float64(blocksSize))
|
||||||
|
|
||||||
slices.SortFunc(toLoad, func(a, b *Block) int {
|
slices.SortFunc(toLoad, func(a, b *Block) int {
|
||||||
return int(a.Meta().MinTime - b.Meta().MinTime)
|
switch {
|
||||||
|
case a.Meta().MinTime < b.Meta().MinTime:
|
||||||
|
return -1
|
||||||
|
case a.Meta().MinTime > b.Meta().MinTime:
|
||||||
|
return 1
|
||||||
|
default:
|
||||||
|
return 0
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Swap new blocks first for subsequently created readers to be seen.
|
// Swap new blocks first for subsequently created readers to be seen.
|
||||||
|
@ -1582,7 +1596,14 @@ func deletableBlocks(db *DB, blocks []*Block) map[ulid.ULID]struct{} {
|
||||||
// Sort the blocks by time - newest to oldest (largest to smallest timestamp).
|
// Sort the blocks by time - newest to oldest (largest to smallest timestamp).
|
||||||
// This ensures that the retentions will remove the oldest blocks.
|
// This ensures that the retentions will remove the oldest blocks.
|
||||||
slices.SortFunc(blocks, func(a, b *Block) int {
|
slices.SortFunc(blocks, func(a, b *Block) int {
|
||||||
return int(b.Meta().MaxTime - a.Meta().MaxTime)
|
switch {
|
||||||
|
case b.Meta().MaxTime < a.Meta().MaxTime:
|
||||||
|
return -1
|
||||||
|
case b.Meta().MaxTime > a.Meta().MaxTime:
|
||||||
|
return 1
|
||||||
|
default:
|
||||||
|
return 0
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
for _, block := range blocks {
|
for _, block := range blocks {
|
||||||
|
|
Loading…
Reference in a new issue