Fix panic caused by 0 division
Introduced in #108 Signed-off-by: Goutham Veeramachaneni <cs14btech11014@iith.ac.in>
This commit is contained in:
parent
e0aca4bee9
commit
178f840295
|
@ -98,11 +98,13 @@ func newCompactorMetrics(r prometheus.Registerer) *compactorMetrics {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LeveledCompactorOptions are the options for a LeveledCompactor.
|
||||||
type LeveledCompactorOptions struct {
|
type LeveledCompactorOptions struct {
|
||||||
blockRanges []int64
|
blockRanges []int64
|
||||||
chunkPool chunks.Pool
|
chunkPool chunks.Pool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewLeveledCompactor returns a LeveledCompactor.
|
||||||
func NewLeveledCompactor(r prometheus.Registerer, l log.Logger, opts *LeveledCompactorOptions) *LeveledCompactor {
|
func NewLeveledCompactor(r prometheus.Registerer, l log.Logger, opts *LeveledCompactorOptions) *LeveledCompactor {
|
||||||
if opts == nil {
|
if opts == nil {
|
||||||
opts = &LeveledCompactorOptions{
|
opts = &LeveledCompactorOptions{
|
||||||
|
@ -151,6 +153,10 @@ func (c *LeveledCompactor) Plan(dir string) ([]string, error) {
|
||||||
return dms[i].meta.MinTime < dms[j].meta.MinTime
|
return dms[i].meta.MinTime < dms[j].meta.MinTime
|
||||||
})
|
})
|
||||||
|
|
||||||
|
return c.plan(dms)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *LeveledCompactor) plan(dms []dirMeta) ([]string, error) {
|
||||||
if len(dms) <= 1 {
|
if len(dms) <= 1 {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
@ -170,7 +176,7 @@ func (c *LeveledCompactor) Plan(dir string) ([]string, error) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
if meta.Stats.NumSeries/meta.Stats.NumTombstones <= 20 { // 5%
|
if meta.Stats.NumSeries/(meta.Stats.NumTombstones+1) <= 20 { // 5%
|
||||||
return []string{dms[i].dir}, nil
|
return []string{dms[i].dir}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -309,3 +309,28 @@ func TestSplitByRange(t *testing.T) {
|
||||||
require.Equal(t, exp, splitByRange(blocks, c.trange))
|
require.Equal(t, exp, splitByRange(blocks, c.trange))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See https://github.com/prometheus/prometheus/issues/3064
|
||||||
|
func TestNoPanicFor0Tombstones(t *testing.T) {
|
||||||
|
metas := []dirMeta{
|
||||||
|
{
|
||||||
|
dir: "1",
|
||||||
|
meta: &BlockMeta{
|
||||||
|
MinTime: 0,
|
||||||
|
MaxTime: 100,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dir: "2",
|
||||||
|
meta: &BlockMeta{
|
||||||
|
MinTime: 101,
|
||||||
|
MaxTime: 200,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
c := NewLeveledCompactor(nil, nil, &LeveledCompactorOptions{
|
||||||
|
blockRanges: []int64{50},
|
||||||
|
})
|
||||||
|
c.plan(metas)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue