9797 blockVisitMarkerWriteFailed ,
9898 partitionedGroupInfoReadFailed ,
9999 partitionedGroupInfoWriteFailed ,
100- noCompactionMarkFilter .NoCompactMarkedBlocks )
100+ noCompactionMarkFilter .NoCompactMarkedBlocks ,
101+ )
101102 }
102103
103104 DefaultBlocksCompactorFactory = func (ctx context.Context , cfg Config , logger log.Logger , reg prometheus.Registerer ) (compact.Compactor , PlannerFactory , error ) {
@@ -126,12 +127,12 @@ var (
126127 return compactor , plannerFactory , nil
127128 }
128129
129- DefaultCompactionCompleteCheckerFactory = func (_ context.Context , _ objstore.InstrumentedBucket , _ log.Logger , _ prometheus.Counter , _ prometheus.Counter ) compact.ExtraCompactionCompleteChecker {
130- return compact.DefaultCompactionCompleteChecker {}
130+ DefaultBlockDeletableCheckerFactory = func (_ context.Context , _ objstore.InstrumentedBucket , _ log.Logger , _ prometheus.Counter , _ prometheus.Counter ) compact.BlockDeletableChecker {
131+ return compact.DefaultBlockDeletableChecker {}
131132 }
132133
133- PartitionCompactionCompleteCheckerFactory = func (ctx context.Context , bkt objstore.InstrumentedBucket , logger log.Logger , blockVisitMarkerReadFailed prometheus.Counter , partitionedGroupInfoWriteFailed prometheus.Counter ) compact.ExtraCompactionCompleteChecker {
134- return NewPartitionCompactionCompleteChecker (ctx , bkt , logger , blockVisitMarkerReadFailed , partitionedGroupInfoWriteFailed )
134+ PartitionCompactionBlockDeletableCheckerFactory = func (ctx context.Context , bkt objstore.InstrumentedBucket , logger log.Logger , blockVisitMarkerReadFailed prometheus.Counter , partitionedGroupInfoWriteFailed prometheus.Counter ) compact.BlockDeletableChecker {
135+ return NewPartitionCompactionBlockDeletableChecker (ctx , bkt , logger , blockVisitMarkerReadFailed , partitionedGroupInfoWriteFailed )
135136 }
136137)
137138
@@ -176,13 +177,13 @@ type PlannerFactory func(
176177 blockVisitMarkerWriteFailed prometheus.Counter ,
177178) compact.Planner
178179
179- type CompactionCompleteCheckerFactory func (
180+ type BlockDeletableCheckerFactory func (
180181 ctx context.Context ,
181182 bkt objstore.InstrumentedBucket ,
182183 logger log.Logger ,
183184 blockVisitMarkerReadFailed prometheus.Counter ,
184185 partitionedGroupInfoReadFailed prometheus.Counter ,
185- ) compact.ExtraCompactionCompleteChecker
186+ ) compact.BlockDeletableChecker
186187
187188// Limits defines limits used by the Compactor.
188189type Limits interface {
@@ -334,7 +335,7 @@ type Compactor struct {
334335
335336 blocksPlannerFactory PlannerFactory
336337
337- compactionCompleteCheckerFactory CompactionCompleteCheckerFactory
338+ blockDeletableCheckerFactory BlockDeletableCheckerFactory
338339
339340 // Client used to run operations on the bucket storing blocks.
340341 bucketClient objstore.Bucket
@@ -347,7 +348,6 @@ type Compactor struct {
347348
348349 // Metrics.
349350 compactionRunsStarted prometheus.Counter
350- compactionRunsInterrupted prometheus.Counter
351351 compactionRunsCompleted prometheus.Counter
352352 compactionRunsFailed prometheus.Counter
353353 compactionRunsLastSuccess prometheus.Gauge
@@ -393,14 +393,14 @@ func NewCompactor(compactorCfg Config, storageCfg cortex_tsdb.BlocksStorageConfi
393393 }
394394 }
395395
396- var compactionCompleteCheckerFactory CompactionCompleteCheckerFactory
396+ var blockDeletableCheckerFactory BlockDeletableCheckerFactory
397397 if compactorCfg .ShardingStrategy == util .ShardingStrategyShuffle {
398- compactionCompleteCheckerFactory = PartitionCompactionCompleteCheckerFactory
398+ blockDeletableCheckerFactory = PartitionCompactionBlockDeletableCheckerFactory
399399 } else {
400- compactionCompleteCheckerFactory = DefaultCompactionCompleteCheckerFactory
400+ blockDeletableCheckerFactory = DefaultBlockDeletableCheckerFactory
401401 }
402402
403- cortexCompactor , err := newCompactor (compactorCfg , storageCfg , cfgProvider , logger , registerer , bucketClientFactory , blocksGrouperFactory , blocksCompactorFactory , compactionCompleteCheckerFactory , limits )
403+ cortexCompactor , err := newCompactor (compactorCfg , storageCfg , cfgProvider , logger , registerer , bucketClientFactory , blocksGrouperFactory , blocksCompactorFactory , blockDeletableCheckerFactory , limits )
404404 if err != nil {
405405 return nil , errors .Wrap (err , "failed to create Cortex blocks compactor" )
406406 }
@@ -417,7 +417,7 @@ func newCompactor(
417417 bucketClientFactory func (ctx context.Context ) (objstore.Bucket , error ),
418418 blocksGrouperFactory BlocksGrouperFactory ,
419419 blocksCompactorFactory BlocksCompactorFactory ,
420- compactionCompleteCheckerFactory CompactionCompleteCheckerFactory ,
420+ blockDeletableCheckerFactory BlockDeletableCheckerFactory ,
421421 limits Limits ,
422422) (* Compactor , error ) {
423423 var remainingPlannedCompactions prometheus.Gauge
@@ -428,27 +428,23 @@ func newCompactor(
428428 })
429429 }
430430 c := & Compactor {
431- compactorCfg : compactorCfg ,
432- storageCfg : storageCfg ,
433- cfgProvider : cfgProvider ,
434- parentLogger : logger ,
435- logger : log .With (logger , "component" , "compactor" ),
436- registerer : registerer ,
437- syncerMetrics : newSyncerMetrics (registerer ),
438- bucketClientFactory : bucketClientFactory ,
439- blocksGrouperFactory : blocksGrouperFactory ,
440- blocksCompactorFactory : blocksCompactorFactory ,
441- compactionCompleteCheckerFactory : compactionCompleteCheckerFactory ,
442- allowedTenants : util .NewAllowedTenants (compactorCfg .EnabledTenants , compactorCfg .DisabledTenants ),
431+ compactorCfg : compactorCfg ,
432+ storageCfg : storageCfg ,
433+ cfgProvider : cfgProvider ,
434+ parentLogger : logger ,
435+ logger : log .With (logger , "component" , "compactor" ),
436+ registerer : registerer ,
437+ syncerMetrics : newSyncerMetrics (registerer ),
438+ bucketClientFactory : bucketClientFactory ,
439+ blocksGrouperFactory : blocksGrouperFactory ,
440+ blocksCompactorFactory : blocksCompactorFactory ,
441+ blockDeletableCheckerFactory : blockDeletableCheckerFactory ,
442+ allowedTenants : util .NewAllowedTenants (compactorCfg .EnabledTenants , compactorCfg .DisabledTenants ),
443443
444444 compactionRunsStarted : promauto .With (registerer ).NewCounter (prometheus.CounterOpts {
445445 Name : "cortex_compactor_runs_started_total" ,
446446 Help : "Total number of compaction runs started." ,
447447 }),
448- compactionRunsInterrupted : promauto .With (registerer ).NewCounter (prometheus.CounterOpts {
449- Name : "cortex_compactor_runs_interrupted_total" ,
450- Help : "Total number of compaction runs interrupted." ,
451- }),
452448 compactionRunsCompleted : promauto .With (registerer ).NewCounter (prometheus.CounterOpts {
453449 Name : "cortex_compactor_runs_completed_total" ,
454450 Help : "Total number of compaction runs successfully completed." ,
@@ -656,23 +652,16 @@ func (c *Compactor) running(ctx context.Context) error {
656652}
657653
658654func (c * Compactor ) compactUsers (ctx context.Context ) {
659- failed := false
660- interrupted := false
655+ succeeded := false
656+ compactionErrorCount := 0
661657
662658 c .compactionRunsStarted .Inc ()
663659
664660 defer func () {
665- // interruptions and successful runs are considered
666- // mutually exclusive but we consider a run failed if any
667- // tenant runs failed even if later runs are interrupted
668- if ! interrupted && ! failed {
661+ if succeeded && compactionErrorCount == 0 {
669662 c .compactionRunsCompleted .Inc ()
670663 c .compactionRunsLastSuccess .SetToCurrentTime ()
671- }
672- if interrupted {
673- c .compactionRunsInterrupted .Inc ()
674- }
675- if failed {
664+ } else {
676665 c .compactionRunsFailed .Inc ()
677666 }
678667
@@ -686,7 +675,6 @@ func (c *Compactor) compactUsers(ctx context.Context) {
686675 level .Info (c .logger ).Log ("msg" , "discovering users from bucket" )
687676 users , err := c .discoverUsersWithRetries (ctx )
688677 if err != nil {
689- failed = true
690678 level .Error (c .logger ).Log ("msg" , "failed to discover users from bucket" , "err" , err )
691679 return
692680 }
@@ -706,8 +694,7 @@ func (c *Compactor) compactUsers(ctx context.Context) {
706694 for _ , userID := range users {
707695 // Ensure the context has not been canceled (ie. compactor shutdown has been triggered).
708696 if ctx .Err () != nil {
709- interrupted = true
710- level .Info (c .logger ).Log ("msg" , "interrupting compaction of user blocks" , "user" , userID )
697+ level .Info (c .logger ).Log ("msg" , "interrupting compaction of user blocks" , "err" , err )
711698 return
712699 }
713700
@@ -737,15 +724,8 @@ func (c *Compactor) compactUsers(ctx context.Context) {
737724 level .Info (c .logger ).Log ("msg" , "starting compaction of user blocks" , "user" , userID )
738725
739726 if err = c .compactUserWithRetries (ctx , userID ); err != nil {
740- // TODO: patch thanos error types to support errors.Is(err, context.Canceled) here
741- if ctx .Err () != nil && ctx .Err () == context .Canceled {
742- interrupted = true
743- level .Info (c .logger ).Log ("msg" , "interrupting compaction of user blocks" , "user" , userID )
744- return
745- }
746-
747727 c .compactionRunFailedTenants .Inc ()
748- failed = true
728+ compactionErrorCount ++
749729 level .Error (c .logger ).Log ("msg" , "failed to compact user blocks" , "user" , userID , "err" , err )
750730 continue
751731 }
@@ -780,6 +760,8 @@ func (c *Compactor) compactUsers(ctx context.Context) {
780760 }
781761 }
782762 }
763+
764+ succeeded = true
783765}
784766
785767func (c * Compactor ) compactUserWithRetries (ctx context.Context , userID string ) error {
@@ -868,8 +850,8 @@ func (c *Compactor) compactUser(ctx context.Context, userID string) error {
868850 c .blocksGrouperFactory (ctx , c .compactorCfg , bucket , ulogger , reg , c .blocksMarkedForDeletion , c .blocksMarkedForNoCompaction , c .garbageCollectedBlocks , c .remainingPlannedCompactions , c .blockVisitMarkerReadFailed , c .blockVisitMarkerWriteFailed , c .partitionedGroupInfoReadFailed , c .partitionedGroupInfoWriteFailed , c .ring , c .ringLifecycler , c .limits , userID , noCompactMarkerFilter ),
869851 c .blocksPlannerFactory (ctx , bucket , ulogger , c .compactorCfg , noCompactMarkerFilter , c .ringLifecycler , c .blockVisitMarkerReadFailed , c .blockVisitMarkerWriteFailed ),
870852 c .blocksCompactor ,
871- c .compactionCompleteCheckerFactory (ctx , bucket , ulogger , c .blockVisitMarkerReadFailed , c .partitionedGroupInfoReadFailed ),
872- compact. NoopCompactionLifecycleCallback {},
853+ c .blockDeletableCheckerFactory (ctx , bucket , ulogger , c .blockVisitMarkerReadFailed , c .partitionedGroupInfoReadFailed ),
854+ ShardedCompactionLifecycleCallback {},
873855 path .Join (c .compactorCfg .DataDir , "compact" ),
874856 bucket ,
875857 c .compactorCfg .CompactionConcurrency ,
0 commit comments