@@ -84,6 +84,64 @@ func TestPartitionCompactionGrouper_GenerateCompactionJobs(t *testing.T) {
84
84
{blocks : []ulid.ULID {block3 , block4 }, partitionCount : 1 , partitionID : 0 , rangeStart : 2 * H , rangeEnd : 4 * H },
85
85
},
86
86
},
87
+ "only level 1 blocks with ingestion replication factor 3" : {
88
+ ranges : []time.Duration {2 * time .Hour , 12 * time .Hour , 24 * time .Hour },
89
+ blocks : map [ulid.ULID ]mockBlock {
90
+ block1 : {
91
+ meta : & metadata.Meta {
92
+ BlockMeta : tsdb.BlockMeta {ULID : block1 , MinTime : 0 * H , MaxTime : 2 * H , Compaction : tsdb.BlockMetaCompaction {Level : 1 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
93
+ Thanos : metadata.Thanos {Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
94
+ },
95
+ timeRange : 2 * time .Hour ,
96
+ hasNoCompactMark : false ,
97
+ },
98
+ block2 : {
99
+ meta : & metadata.Meta {
100
+ BlockMeta : tsdb.BlockMeta {ULID : block2 , MinTime : 0 * H , MaxTime : 2 * H , Compaction : tsdb.BlockMetaCompaction {Level : 1 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
101
+ Thanos : metadata.Thanos {Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
102
+ },
103
+ timeRange : 2 * time .Hour ,
104
+ hasNoCompactMark : false ,
105
+ },
106
+ block3 : {
107
+ meta : & metadata.Meta {
108
+ BlockMeta : tsdb.BlockMeta {ULID : block3 , MinTime : 0 * H , MaxTime : 2 * H , Compaction : tsdb.BlockMetaCompaction {Level : 1 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
109
+ Thanos : metadata.Thanos {Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
110
+ },
111
+ timeRange : 2 * time .Hour ,
112
+ hasNoCompactMark : false ,
113
+ },
114
+ block4 : {
115
+ meta : & metadata.Meta {
116
+ BlockMeta : tsdb.BlockMeta {ULID : block4 , MinTime : 0 * H , MaxTime : 2 * H , Compaction : tsdb.BlockMetaCompaction {Level : 1 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
117
+ Thanos : metadata.Thanos {Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
118
+ },
119
+ timeRange : 2 * time .Hour ,
120
+ hasNoCompactMark : false ,
121
+ },
122
+ block5 : {
123
+ meta : & metadata.Meta {
124
+ BlockMeta : tsdb.BlockMeta {ULID : block5 , MinTime : 0 * H , MaxTime : 2 * H , Compaction : tsdb.BlockMetaCompaction {Level : 1 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
125
+ Thanos : metadata.Thanos {Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
126
+ },
127
+ timeRange : 2 * time .Hour ,
128
+ hasNoCompactMark : false ,
129
+ },
130
+ block6 : {
131
+ meta : & metadata.Meta {
132
+ BlockMeta : tsdb.BlockMeta {ULID : block6 , MinTime : 0 * H , MaxTime : 2 * H , Compaction : tsdb.BlockMetaCompaction {Level : 1 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
133
+ Thanos : metadata.Thanos {Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
134
+ },
135
+ timeRange : 2 * time .Hour ,
136
+ hasNoCompactMark : false ,
137
+ },
138
+ },
139
+ existingPartitionedGroups : []mockExistingPartitionedGroup {},
140
+ expected : []expectedCompactionJob {
141
+ {blocks : []ulid.ULID {block1 , block2 , block3 , block4 , block5 , block6 }, partitionCount : 1 , partitionID : 0 , rangeStart : 0 * H , rangeEnd : 2 * H },
142
+ },
143
+ ingestionReplicationFactor : 3 ,
144
+ },
87
145
"only level 1 blocks, there is existing partitioned group file" : {
88
146
ranges : []time.Duration {2 * time .Hour , 12 * time .Hour , 24 * time .Hour },
89
147
blocks : map [ulid.ULID ]mockBlock {
@@ -499,6 +557,65 @@ func TestPartitionCompactionGrouper_GenerateCompactionJobs(t *testing.T) {
499
557
{blocks : []ulid.ULID {block1 , block2 , block3 }, partitionCount : 1 , partitionID : 0 , rangeStart : 0 * H , rangeEnd : 12 * H },
500
558
},
501
559
},
560
+ "level 2 blocks with ingestion replication factor 3" : {
561
+ ranges : []time.Duration {2 * time .Hour , 12 * time .Hour , 24 * time .Hour },
562
+ blocks : map [ulid.ULID ]mockBlock {
563
+ block1 : {
564
+ meta : & metadata.Meta {
565
+ BlockMeta : tsdb.BlockMeta {ULID : block1 , MinTime : 0 * H , MaxTime : 2 * H , Compaction : tsdb.BlockMetaCompaction {Level : 2 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
566
+ Thanos : metadata.Thanos {Extensions : cortextsdb.CortexMetaExtensions {PartitionInfo : & cortextsdb.PartitionInfo {PartitionCount : 2 , PartitionID : 0 }}, Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
567
+ },
568
+ timeRange : 2 * time .Hour ,
569
+ hasNoCompactMark : false ,
570
+ },
571
+ block2 : {
572
+ meta : & metadata.Meta {
573
+ BlockMeta : tsdb.BlockMeta {ULID : block2 , MinTime : 0 * H , MaxTime : 2 * H , Compaction : tsdb.BlockMetaCompaction {Level : 2 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
574
+ Thanos : metadata.Thanos {Extensions : cortextsdb.CortexMetaExtensions {PartitionInfo : & cortextsdb.PartitionInfo {PartitionCount : 2 , PartitionID : 1 }}, Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
575
+ },
576
+ timeRange : 2 * time .Hour ,
577
+ hasNoCompactMark : false ,
578
+ },
579
+ block3 : {
580
+ meta : & metadata.Meta {
581
+ BlockMeta : tsdb.BlockMeta {ULID : block3 , MinTime : 2 * H , MaxTime : 4 * H , Compaction : tsdb.BlockMetaCompaction {Level : 2 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
582
+ Thanos : metadata.Thanos {Extensions : cortextsdb.CortexMetaExtensions {PartitionInfo : & cortextsdb.PartitionInfo {PartitionCount : 2 , PartitionID : 0 }}, Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
583
+ },
584
+ timeRange : 2 * time .Hour ,
585
+ hasNoCompactMark : false ,
586
+ },
587
+ block4 : {
588
+ meta : & metadata.Meta {
589
+ BlockMeta : tsdb.BlockMeta {ULID : block4 , MinTime : 2 * H , MaxTime : 4 * H , Compaction : tsdb.BlockMetaCompaction {Level : 2 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
590
+ Thanos : metadata.Thanos {Extensions : cortextsdb.CortexMetaExtensions {PartitionInfo : & cortextsdb.PartitionInfo {PartitionCount : 2 , PartitionID : 1 }}, Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
591
+ },
592
+ timeRange : 2 * time .Hour ,
593
+ hasNoCompactMark : false ,
594
+ },
595
+ block5 : {
596
+ meta : & metadata.Meta {
597
+ BlockMeta : tsdb.BlockMeta {ULID : block5 , MinTime : 4 * H , MaxTime : 6 * H , Compaction : tsdb.BlockMetaCompaction {Level : 2 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
598
+ Thanos : metadata.Thanos {Extensions : cortextsdb.CortexMetaExtensions {PartitionInfo : & cortextsdb.PartitionInfo {PartitionCount : 2 , PartitionID : 0 }}, Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
599
+ },
600
+ timeRange : 2 * time .Hour ,
601
+ hasNoCompactMark : false ,
602
+ },
603
+ block6 : {
604
+ meta : & metadata.Meta {
605
+ BlockMeta : tsdb.BlockMeta {ULID : block6 , MinTime : 4 * H , MaxTime : 6 * H , Compaction : tsdb.BlockMetaCompaction {Level : 2 }, Stats : tsdb.BlockStats {NumSeries : 1 }},
606
+ Thanos : metadata.Thanos {Extensions : cortextsdb.CortexMetaExtensions {PartitionInfo : & cortextsdb.PartitionInfo {PartitionCount : 2 , PartitionID : 1 }}, Files : []metadata.File {{RelPath : thanosblock .IndexFilename , SizeBytes : 0 }}},
607
+ },
608
+ timeRange : 2 * time .Hour ,
609
+ hasNoCompactMark : false ,
610
+ },
611
+ },
612
+ existingPartitionedGroups : []mockExistingPartitionedGroup {},
613
+ expected : []expectedCompactionJob {
614
+ {blocks : []ulid.ULID {block1 , block3 , block5 }, partitionCount : 2 , partitionID : 0 , rangeStart : 0 * H , rangeEnd : 12 * H },
615
+ {blocks : []ulid.ULID {block2 , block4 , block6 }, partitionCount : 2 , partitionID : 1 , rangeStart : 0 * H , rangeEnd : 12 * H },
616
+ },
617
+ ingestionReplicationFactor : 3 ,
618
+ },
502
619
"level 2 blocks along with level 3 blocks from some of partitions, level 1 blocks in different time range, there are partitioned group files for all groups" : {
503
620
ranges : []time.Duration {2 * time .Hour , 12 * time .Hour , 24 * time .Hour },
504
621
blocks : map [ulid.ULID ]mockBlock {
@@ -1966,6 +2083,10 @@ func TestPartitionCompactionGrouper_GenerateCompactionJobs(t *testing.T) {
1966
2083
1967
2084
ctx , cancel := context .WithCancel (context .Background ())
1968
2085
defer cancel ()
2086
+ ingestionReplicationFactor := 1
2087
+ if testCase .ingestionReplicationFactor > 1 {
2088
+ ingestionReplicationFactor = testCase .ingestionReplicationFactor
2089
+ }
1969
2090
g := NewPartitionCompactionGrouper (
1970
2091
ctx ,
1971
2092
nil ,
@@ -1988,7 +2109,7 @@ func TestPartitionCompactionGrouper_GenerateCompactionJobs(t *testing.T) {
1988
2109
false ,
1989
2110
visitMarkerTimeout ,
1990
2111
noCompactFilter ,
1991
- 1 ,
2112
+ ingestionReplicationFactor ,
1992
2113
)
1993
2114
actual , err := g .generateCompactionJobs (testCase .getBlocks ())
1994
2115
require .NoError (t , err )
@@ -2011,10 +2132,11 @@ func TestPartitionCompactionGrouper_GenerateCompactionJobs(t *testing.T) {
2011
2132
}
2012
2133
2013
2134
type generateCompactionJobsTestCase struct {
2014
- ranges []time.Duration
2015
- blocks map [ulid.ULID ]mockBlock
2016
- existingPartitionedGroups []mockExistingPartitionedGroup
2017
- expected []expectedCompactionJob
2135
+ ranges []time.Duration
2136
+ blocks map [ulid.ULID ]mockBlock
2137
+ existingPartitionedGroups []mockExistingPartitionedGroup
2138
+ expected []expectedCompactionJob
2139
+ ingestionReplicationFactor int
2018
2140
}
2019
2141
2020
2142
func (g * generateCompactionJobsTestCase ) setupBucketStore (t * testing.T , bkt * bucket.ClientMock , userID string , visitMarkerTimeout time.Duration ) {
0 commit comments