Skip to content

Commit ecefb49

Browse files
authored
fix(blooms): Fix a regression introduced with #12774 (#12776)
This PR fixes a regression introduced with #12774 where series where wrongly identified as "skipped" even though there were part of blocks. Signed-off-by: Christian Haudum <[email protected]>
1 parent c36b114 commit ecefb49

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

pkg/bloomgateway/querier.go

+9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type querierMetrics struct {
2222
chunksFiltered prometheus.Counter
2323
seriesTotal prometheus.Counter
2424
seriesFiltered prometheus.Counter
25+
seriesSkipped prometheus.Counter
2526
}
2627

2728
func newQuerierMetrics(registerer prometheus.Registerer, namespace, subsystem string) *querierMetrics {
@@ -50,6 +51,12 @@ func newQuerierMetrics(registerer prometheus.Registerer, namespace, subsystem st
5051
Name: "series_filtered_total",
5152
Help: "Total amount of series that have been filtered out. Does not count series in failed requests.",
5253
}),
54+
seriesSkipped: promauto.With(registerer).NewCounter(prometheus.CounterOpts{
55+
Namespace: namespace,
56+
Subsystem: subsystem,
57+
Name: "series_skipped_total",
58+
Help: "Total amount of series that have been skipped and returned unfiltered, because no block matched the series.",
59+
}),
5360
}
5461
}
5562

@@ -114,6 +121,7 @@ func (bq *BloomQuerier) FilterChunkRefs(ctx context.Context, tenant string, from
114121
"series", len(s.series),
115122
"chunks", chunks,
116123
"blocks", len(blocks),
124+
"skipped", len(skipped),
117125
)
118126

119127
refs, err := bq.c.FilterChunks(ctx, tenant, s.interval, blocks, queryPlan)
@@ -123,6 +131,7 @@ func (bq *BloomQuerier) FilterChunkRefs(ctx context.Context, tenant string, from
123131

124132
// add chunk refs from series that were not mapped to any blocks
125133
refs = append(refs, skipped...)
134+
bq.metrics.seriesSkipped.Add(float64(len(skipped)))
126135

127136
for i := range refs {
128137
seriesSeen[refs[i].Fingerprint] = struct{}{}

pkg/bloomgateway/resolver.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,14 @@ func unassignedSeries(mapped []blockWithSeries, series []*logproto.GroupedChunkR
110110
})
111111

112112
maxIdx := sort.Search(len(skipped), func(i int) bool {
113-
return skipped[i].Fingerprint >= maxFp.Fingerprint
113+
return skipped[i].Fingerprint > maxFp.Fingerprint
114114
})
115115

116116
if minIdx == len(skipped) || maxIdx == 0 || minIdx == maxIdx {
117117
continue
118118
}
119119

120-
skipped = append(skipped[0:minIdx], skipped[maxIdx+1:]...)
120+
skipped = append(skipped[0:minIdx], skipped[maxIdx:]...)
121121
}
122122

123123
return skipped

pkg/bloomgateway/resolver_test.go

+23-1
Original file line numberDiff line numberDiff line change
@@ -242,12 +242,34 @@ func TestBlockResolver_UnassignedSeries(t *testing.T) {
242242
{Fingerprint: 0xe0},
243243
},
244244
},
245+
{
246+
desc: "block overlapping single remaining series",
247+
mapped: []blockWithSeries{
248+
{
249+
series: []*logproto.GroupedChunkRefs{
250+
{Fingerprint: 0x00},
251+
{Fingerprint: 0x20},
252+
{Fingerprint: 0x40},
253+
{Fingerprint: 0x60},
254+
{Fingerprint: 0x80},
255+
{Fingerprint: 0xa0},
256+
{Fingerprint: 0xc0},
257+
},
258+
},
259+
{
260+
series: []*logproto.GroupedChunkRefs{
261+
{Fingerprint: 0xe0},
262+
},
263+
},
264+
},
265+
expected: []*logproto.GroupedChunkRefs{},
266+
},
245267
}
246268

247269
for _, tc := range testCases {
248270
t.Run(tc.desc, func(t *testing.T) {
249271
result := unassignedSeries(tc.mapped, series)
250-
require.Equal(t, result, tc.expected)
272+
require.Equal(t, tc.expected, result)
251273
})
252274
}
253275
}

0 commit comments

Comments
 (0)