@@ -356,6 +356,69 @@ func TestLazyBloomIter_Seek_ResetError(t *testing.T) {
356
356
}
357
357
}
358
358
359
+ func TestFusedQuerierSkipsEmptyBlooms (t * testing.T ) {
360
+ // references for linking in memory reader+writer
361
+ indexBuf := bytes .NewBuffer (nil )
362
+ bloomsBuf := bytes .NewBuffer (nil )
363
+ writer := NewMemoryBlockWriter (indexBuf , bloomsBuf )
364
+ reader := NewByteReader (indexBuf , bloomsBuf )
365
+
366
+ builder , err := NewBlockBuilder (
367
+ BlockOptions {
368
+ Schema : Schema {
369
+ version : DefaultSchemaVersion ,
370
+ encoding : chunkenc .EncNone ,
371
+ },
372
+ SeriesPageSize : 100 ,
373
+ BloomPageSize : 10 << 10 ,
374
+ },
375
+ writer ,
376
+ )
377
+ require .Nil (t , err )
378
+
379
+ data := SeriesWithBlooms {
380
+ Series : & Series {
381
+ Fingerprint : 0 ,
382
+ Chunks : []ChunkRef {
383
+ {
384
+ From : 0 ,
385
+ Through : 10 ,
386
+ Checksum : 0x1234 ,
387
+ },
388
+ },
389
+ },
390
+ Blooms : v2 .NewSliceIter ([]* Bloom {
391
+ // simulate empty bloom
392
+ {
393
+ * filter .NewScalableBloomFilter (1024 , 0.01 , 0.8 ),
394
+ },
395
+ }),
396
+ }
397
+
398
+ itr := v2.NewSliceIter [SeriesWithBlooms ]([]SeriesWithBlooms {data })
399
+ _ , err = builder .BuildFrom (itr )
400
+ require .NoError (t , err )
401
+ require .False (t , itr .Next ())
402
+ block := NewBlock (reader , NewMetrics (nil ))
403
+ ch := make (chan Output , 1 )
404
+ req := Request {
405
+ Fp : data .Series .Fingerprint ,
406
+ Chks : data .Series .Chunks ,
407
+ Search : keysToBloomTest ([][]byte {[]byte ("foobar" )}),
408
+ Response : ch ,
409
+ Recorder : NewBloomRecorder (context .Background (), "unknown" ),
410
+ }
411
+ err = NewBlockQuerier (block , BloomPagePool , DefaultMaxPageSize ).Fuse (
412
+ []v2.PeekIterator [Request ]{
413
+ v2.NewPeekIter [Request ](v2.NewSliceIter [Request ]([]Request {req })),
414
+ },
415
+ log .NewNopLogger (),
416
+ ).Run ()
417
+ require .NoError (t , err )
418
+ x := <- ch
419
+ require .Equal (t , 0 , len (x .Removals ))
420
+ }
421
+
359
422
func setupBlockForBenchmark (b * testing.B ) (* BlockQuerier , [][]Request , []chan Output ) {
360
423
indexBuf := bytes .NewBuffer (nil )
361
424
bloomsBuf := bytes .NewBuffer (nil )
0 commit comments