From ecc2aedaa570ecee79fb2a71511cc1435f32de96 Mon Sep 17 00:00:00 2001 From: Paul Rogers Date: Wed, 10 Jan 2024 12:57:38 -0500 Subject: [PATCH] Check for error when calling Next(). Also add the start of a test to ensure encode/decode works fine --- pkg/storage/bloom/v1/block.go | 8 ++++++-- pkg/storage/bloom/v1/bloom_test.go | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 pkg/storage/bloom/v1/bloom_test.go diff --git a/pkg/storage/bloom/v1/block.go b/pkg/storage/bloom/v1/block.go index 468f0d031506..5068a3a986f5 100644 --- a/pkg/storage/bloom/v1/block.go +++ b/pkg/storage/bloom/v1/block.go @@ -2,6 +2,8 @@ package v1 import ( "fmt" + "github.com/go-kit/kit/log/level" + util_log "github.com/grafana/loki/pkg/util/log" "github.com/pkg/errors" "github.com/prometheus/common/model" @@ -109,7 +111,9 @@ func (bq *BlockQuerier) Next() bool { series := bq.series.At() bq.blooms.Seek(series.Offset) - if !bq.blooms.Next() { + if bq.blooms.Err() != nil || !bq.blooms.Next() { + + level.Info(util_log.Logger).Log("msg", "error seeking to series offset", "offset", series.Offset, "err", bq.blooms.Err()) return false } @@ -154,7 +158,7 @@ func (bq *BlockQuerier) CheckChunksForSeries(fp model.Fingerprint, chks ChunkRef } bq.blooms.Seek(series.Offset) - if !bq.blooms.Next() { + if bq.blooms.Err() != nil || !bq.blooms.Next() { return chks, fmt.Errorf("seeking to bloom for fp: %v", fp) } diff --git a/pkg/storage/bloom/v1/bloom_test.go b/pkg/storage/bloom/v1/bloom_test.go new file mode 100644 index 000000000000..49ead5e2c4f3 --- /dev/null +++ b/pkg/storage/bloom/v1/bloom_test.go @@ -0,0 +1,18 @@ +package v1 + +import ( + "github.com/grafana/loki/pkg/util/encoding" + "testing" +) + +func TestEncodeDecode(t *testing.T) { + numSeries := 100 + numKeysPerSeries := 10000 + data, _ := mkBasicSeriesWithBlooms(numSeries, numKeysPerSeries, 0, 0xffff, 0, 10000) + enc := &encoding.Encbuf{} + data[0].Bloom.Encode(enc) + dec := encoding.DecWith(enc.Get()) + var bloom Bloom + bloom.Decode(&dec) + +}