Merge remote-tracking branch 'upstream/main' into upgrade-prometheus

owilliams/utf8-02-mimir
Peter Štibraný 3 years ago
commit 61e6173900

@ -356,6 +356,7 @@ func TestReshardRaceWithStop(t *testing.T) {
cfg := config.DefaultQueueConfig cfg := config.DefaultQueueConfig
mcfg := config.DefaultMetadataConfig mcfg := config.DefaultMetadataConfig
exitCh := make(chan struct{})
go func() { go func() {
for { for {
metrics := newQueueManagerMetrics(nil, "", "") metrics := newQueueManagerMetrics(nil, "", "")
@ -364,6 +365,12 @@ func TestReshardRaceWithStop(t *testing.T) {
h.Unlock() h.Unlock()
h.Lock() h.Lock()
m.Stop() m.Stop()
select {
case exitCh <- struct{}{}:
return
default:
}
} }
}() }()
@ -372,6 +379,7 @@ func TestReshardRaceWithStop(t *testing.T) {
m.reshardChan <- i m.reshardChan <- i
h.Unlock() h.Unlock()
} }
<-exitCh
} }
func TestReleaseNoninternedString(t *testing.T) { func TestReleaseNoninternedString(t *testing.T) {

@ -18,7 +18,6 @@ import (
"crypto/rand" "crypto/rand"
"fmt" "fmt"
"io" "io"
"math"
"os" "os"
"path/filepath" "path/filepath"
"sort" "sort"
@ -373,19 +372,20 @@ func splitByRange(ds []dirMeta, tr int64) [][]dirMeta {
} }
// CompactBlockMetas merges many block metas into one, combining it's source blocks together // CompactBlockMetas merges many block metas into one, combining it's source blocks together
// and adjusting compaction level. // and adjusting compaction level. Min/Max time of result block meta covers all input blocks.
func CompactBlockMetas(uid ulid.ULID, blocks ...*BlockMeta) *BlockMeta { func CompactBlockMetas(uid ulid.ULID, blocks ...*BlockMeta) *BlockMeta {
res := &BlockMeta{ res := &BlockMeta{
ULID: uid, ULID: uid,
MinTime: blocks[0].MinTime,
} }
sources := map[ulid.ULID]struct{}{} sources := map[ulid.ULID]struct{}{}
// For overlapping blocks, the Maxt can be mint := blocks[0].MinTime
// in any block so we track it globally. maxt := blocks[0].MaxTime
maxt := int64(math.MinInt64)
for _, b := range blocks { for _, b := range blocks {
if b.MinTime < mint {
mint = b.MinTime
}
if b.MaxTime > maxt { if b.MaxTime > maxt {
maxt = b.MaxTime maxt = b.MaxTime
} }
@ -410,6 +410,7 @@ func CompactBlockMetas(uid ulid.ULID, blocks ...*BlockMeta) *BlockMeta {
return res.Compaction.Sources[i].Compare(res.Compaction.Sources[j]) < 0 return res.Compaction.Sources[i].Compare(res.Compaction.Sources[j]) < 0
}) })
res.MinTime = mint
res.MaxTime = maxt res.MaxTime = maxt
return res return res
} }

@ -1628,3 +1628,38 @@ func checkBlocks(t *testing.T, blocks []*Block, dirs ...string) {
require.Equal(t, blockIDs, dirBlockIDs) require.Equal(t, blockIDs, dirBlockIDs)
} }
func TestCompactBlockMetas(t *testing.T) {
parent1 := ulid.MustNew(100, nil)
parent2 := ulid.MustNew(200, nil)
parent3 := ulid.MustNew(300, nil)
parent4 := ulid.MustNew(400, nil)
input := []*BlockMeta{
{ULID: parent1, MinTime: 1000, MaxTime: 2000, Compaction: BlockMetaCompaction{Level: 2, Sources: []ulid.ULID{ulid.MustNew(1, nil), ulid.MustNew(10, nil)}}},
{ULID: parent2, MinTime: 200, MaxTime: 500, Compaction: BlockMetaCompaction{Level: 1}},
{ULID: parent3, MinTime: 500, MaxTime: 2500, Compaction: BlockMetaCompaction{Level: 3, Sources: []ulid.ULID{ulid.MustNew(5, nil), ulid.MustNew(6, nil)}}},
{ULID: parent4, MinTime: 100, MaxTime: 900, Compaction: BlockMetaCompaction{Level: 1}},
}
outUlid := ulid.MustNew(1000, nil)
output := CompactBlockMetas(outUlid, input...)
expected := &BlockMeta{
ULID: outUlid,
MinTime: 100,
MaxTime: 2500,
Stats: BlockStats{},
Compaction: BlockMetaCompaction{
Level: 4,
Sources: []ulid.ULID{ulid.MustNew(1, nil), ulid.MustNew(5, nil), ulid.MustNew(6, nil), ulid.MustNew(10, nil)},
Parents: []BlockDesc{
{ULID: parent1, MinTime: 1000, MaxTime: 2000},
{ULID: parent2, MinTime: 200, MaxTime: 500},
{ULID: parent3, MinTime: 500, MaxTime: 2500},
{ULID: parent4, MinTime: 100, MaxTime: 900},
},
},
}
require.Equal(t, expected, output)
}

Loading…
Cancel
Save