@@ -749,6 +749,54 @@ func TestGarbageCollect_FilterRace(t *testing.T) {
749749 }
750750}
751751
752+ func TestBlocksCleanerCancellationWhileEnqueuing (t * testing.T ) {
753+ bkt := objstore .WithNoopInstr (objstore .NewInMemBucket ())
754+ deletionMarkFilter := block .NewIgnoreDeletionMarkFilter (log .NewNopLogger (), bkt , 0 , 1 )
755+ deletionMarkCount := 2 * deleteMarkedBlocksConcurrency + 1
756+ metas := make (map [ulid.ULID ]* metadata.Meta , deletionMarkCount )
757+
758+ for i := range deletionMarkCount {
759+ id := ulid .MustNew (uint64 (i + 1 ), bytes .NewReader (make ([]byte , 10 )))
760+ metas [id ] = & metadata.Meta {}
761+
762+ var buf bytes.Buffer
763+ testutil .Ok (t , json .NewEncoder (& buf ).Encode (& metadata.DeletionMark {
764+ ID : id ,
765+ DeletionTime : 0 ,
766+ Version : 1 ,
767+ }))
768+ testutil .Ok (t , bkt .Upload (context .Background (), path .Join (id .String (), metadata .DeletionMarkFilename ), & buf ))
769+ }
770+
771+ synced := promauto .With (nil ).NewGaugeVec (prometheus.GaugeOpts {Name : "test_blocks_cleaner_synced" }, []string {"state" })
772+ testutil .Ok (t , deletionMarkFilter .Filter (context .Background (), metas , synced , nil ))
773+
774+ cleaner := NewBlocksCleaner (
775+ log .NewNopLogger (),
776+ bkt ,
777+ deletionMarkFilter ,
778+ 0 ,
779+ promauto .With (nil ).NewCounter (prometheus.CounterOpts {Name : "test_blocks_cleaner_cleaned" }),
780+ promauto .With (nil ).NewCounter (prometheus.CounterOpts {Name : "test_blocks_cleaner_failures" }),
781+ )
782+
783+ ctx , cancel := context .WithCancel (context .Background ())
784+ cancel ()
785+ done := make (chan error , 1 )
786+ go func () {
787+ _ , err := cleaner .DeleteMarkedBlocks (ctx )
788+ done <- err
789+ }()
790+
791+ select {
792+ case err := <- done :
793+ testutil .NotOk (t , err )
794+ testutil .Assert (t , errors .Is (err , context .Canceled ), "expected context cancellation, got %v" , err )
795+ case <- time .After (time .Second ):
796+ t .Fatal ("DeleteMarkedBlocks blocked after cancellation" )
797+ }
798+ }
799+
752800func TestCompactExtensions (t * testing.T ) {
753801 t .Parallel ()
754802
0 commit comments