diff --git a/pkg/bloomgateway/processor.go b/pkg/bloomgateway/processor.go index 4dc02fef435f7..9f0b2b8b8151d 100644 --- a/pkg/bloomgateway/processor.go +++ b/pkg/bloomgateway/processor.go @@ -167,7 +167,8 @@ func (p *processor) processBlock(_ context.Context, bq *bloomshipper.CloseableBl iters = append(iters, it) } - fq := blockQuerier.Fuse(iters, p.logger) + logger := log.With(p.logger, "block", bq.BlockRef.String()) + fq := blockQuerier.Fuse(iters, logger) start := time.Now() err = fq.Run() diff --git a/pkg/storage/bloom/v1/fuse.go b/pkg/storage/bloom/v1/fuse.go index 264e456161a05..2a6f74d590b85 100644 --- a/pkg/storage/bloom/v1/fuse.go +++ b/pkg/storage/bloom/v1/fuse.go @@ -299,15 +299,24 @@ func (fq *FusedQuerier) runSeries(schema Schema, series *SeriesWithOffsets, reqs // Test each bloom individually bloom := fq.bq.blooms.At() - for j, req := range reqs { - // TODO(owen-d): this is a stopgap to avoid filtering broken blooms until we find their cause. - // In the case we don't have any data in the bloom, don't filter any chunks. - if bloom.ScalableBloomFilter.Count() == 0 { + + // TODO(owen-d): this is a stopgap to avoid filtering broken blooms until we find their cause. + // In the case we don't have any data in the bloom, don't filter any chunks. + if bloom.ScalableBloomFilter.Count() == 0 { + level.Warn(fq.logger).Log( + "msg", "Found bloom with no data", + "offset_page", offset.Page, + "offset_bytes", offset.ByteOffset, + ) + + for j := range reqs { for k := range inputs[j].InBlooms { inputs[j].found[k] = true } } + } + for j, req := range reqs { // shortcut: series level removal // we can skip testing chunk keys individually if the bloom doesn't match // the query.