Skip to content

Commit a1b394d

Browse files
committed
support caching bucket for cleaner
Signed-off-by: yeya24 <[email protected]>
1 parent 0d621ff commit a1b394d

File tree

2 files changed

+53
-8
lines changed

2 files changed

+53
-8
lines changed

pkg/compactor/compactor.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -650,8 +650,17 @@ func (c *Compactor) starting(ctx context.Context) error {
650650
// Wrap the bucket client to write block deletion marks in the global location too.
651651
c.bucketClient = bucketindex.BucketWithGlobalMarkers(c.bucketClient)
652652

653+
cleanerBucketClient := c.bucketClient
654+
655+
if c.compactorCfg.CachingBucketEnabled {
656+
cleanerBucketClient, err = cortex_tsdb.CreateCachingBucketForCompactor(c.storageCfg.BucketStore.MetadataCache, true, c.bucketClient, c.logger, extprom.WrapRegistererWith(prometheus.Labels{"component": "cleaner"}, c.registerer))
657+
if err != nil {
658+
return errors.Wrap(err, "create caching bucket")
659+
}
660+
}
661+
653662
// Create the users scanner.
654-
c.usersScanner = cortex_tsdb.NewUsersScanner(c.bucketClient, c.ownUserForCleanUp, c.parentLogger)
663+
c.usersScanner = cortex_tsdb.NewUsersScanner(cleanerBucketClient, c.ownUserForCleanUp, c.parentLogger)
655664

656665
var cleanerRingLifecyclerID = "default-cleaner"
657666
// Initialize the compactors ring if sharding is enabled.
@@ -727,16 +736,11 @@ func (c *Compactor) starting(ctx context.Context) error {
727736
TenantCleanupDelay: c.compactorCfg.TenantCleanupDelay,
728737
ShardingStrategy: c.compactorCfg.ShardingStrategy,
729738
CompactionStrategy: c.compactorCfg.CompactionStrategy,
730-
}, c.bucketClient, c.usersScanner, c.compactorCfg.CompactionVisitMarkerTimeout, c.limits, c.parentLogger, cleanerRingLifecyclerID, c.registerer, c.compactorCfg.CleanerVisitMarkerTimeout, c.compactorCfg.CleanerVisitMarkerFileUpdateInterval,
739+
}, cleanerBucketClient, c.usersScanner, c.compactorCfg.CompactionVisitMarkerTimeout, c.limits, c.parentLogger, cleanerRingLifecyclerID, c.registerer, c.compactorCfg.CleanerVisitMarkerTimeout, c.compactorCfg.CleanerVisitMarkerFileUpdateInterval,
731740
c.compactorMetrics.syncerBlocksMarkedForDeletion, c.compactorMetrics.remainingPlannedCompactions)
732741

733742
if c.compactorCfg.CachingBucketEnabled {
734-
matchers := cortex_tsdb.NewMatchers()
735-
// Do not cache tenant deletion marker and block deletion marker for compactor
736-
matchers.SetMetaFileMatcher(func(name string) bool {
737-
return strings.HasSuffix(name, "/"+metadata.MetaFilename)
738-
})
739-
c.bucketClient, err = cortex_tsdb.CreateCachingBucket(cortex_tsdb.ChunksCacheConfig{}, c.storageCfg.BucketStore.MetadataCache, matchers, c.bucketClient, c.logger, extprom.WrapRegistererWith(prometheus.Labels{"component": "compactor"}, c.registerer))
743+
c.bucketClient, err = cortex_tsdb.CreateCachingBucketForCompactor(c.storageCfg.BucketStore.MetadataCache, false, c.bucketClient, c.logger, extprom.WrapRegistererWith(prometheus.Labels{"component": "compactor"}, c.registerer))
740744
if err != nil {
741745
return errors.Wrap(err, "create caching bucket")
742746
}

pkg/storage/tsdb/caching_bucket.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,47 @@ func CreateCachingBucket(chunksConfig ChunksCacheConfig, metadataConfig Metadata
245245
return storecache.NewCachingBucket(bkt, cfg, logger, reg)
246246
}
247247

248+
func CreateCachingBucketForCompactor(metadataConfig MetadataCacheConfig, cleaner bool, bkt objstore.InstrumentedBucket, logger log.Logger, reg prometheus.Registerer) (objstore.InstrumentedBucket, error) {
249+
matchers := NewMatchers()
250+
// Do not cache block deletion marker for compactor
251+
matchers.SetMetaFileMatcher(func(name string) bool {
252+
return strings.HasSuffix(name, "/"+metadata.MetaFilename) || strings.HasSuffix(name, "/"+TenantDeletionMarkFile)
253+
})
254+
cfg := cache.NewCachingBucketConfig()
255+
cachingConfigured := false
256+
257+
metadataCache, err := createMetadataCache("metadata-cache", &metadataConfig.MetadataCacheBackend, logger, reg)
258+
if err != nil {
259+
return nil, errors.Wrapf(err, "metadata-cache")
260+
}
261+
if metadataCache != nil {
262+
cachingConfigured = true
263+
metadataCache = cache.NewTracingCache(metadataCache)
264+
265+
codec := snappyIterCodec{storecache.JSONIterCodec{}}
266+
cfg.CacheIter("tenants-iter", metadataCache, matchers.GetTenantsIterMatcher(), metadataConfig.TenantsListTTL, codec, "")
267+
cfg.CacheAttributes("metafile", metadataCache, matchers.GetMetafileMatcher(), metadataConfig.MetafileAttributesTTL)
268+
269+
// Don't cache bucket index get and tenant blocks iter if it is cleaner.
270+
if !cleaner {
271+
cfg.CacheExists("metafile", metadataCache, matchers.GetMetafileMatcher(), metadataConfig.MetafileExistsTTL, metadataConfig.MetafileDoesntExistTTL)
272+
cfg.CacheGet("metafile", metadataCache, matchers.GetMetafileMatcher(), metadataConfig.MetafileMaxSize, metadataConfig.MetafileContentTTL, metadataConfig.MetafileExistsTTL, metadataConfig.MetafileDoesntExistTTL)
273+
cfg.CacheGet("bucket-index", metadataCache, matchers.GetBucketIndexMatcher(), metadataConfig.BucketIndexMaxSize, metadataConfig.BucketIndexContentTTL /* do not cache exist / not exist: */, 0, 0)
274+
cfg.CacheIter("tenant-blocks-iter", metadataCache, matchers.GetTenantBlocksIterMatcher(), metadataConfig.TenantBlocksListTTL, codec, "")
275+
} else {
276+
// Cache only GET for metadata and don't cache exists and not exists.
277+
cfg.CacheGet("metafile", metadataCache, matchers.GetMetafileMatcher(), metadataConfig.MetafileMaxSize, metadataConfig.MetafileContentTTL, 0, 0)
278+
}
279+
}
280+
281+
if !cachingConfigured {
282+
// No caching is configured.
283+
return bkt, nil
284+
}
285+
286+
return storecache.NewCachingBucket(bkt, cfg, logger, reg)
287+
}
288+
248289
func createMetadataCache(cacheName string, cacheBackend *MetadataCacheBackend, logger log.Logger, reg prometheus.Registerer) (cache.Cache, error) {
249290
switch cacheBackend.Backend {
250291
case "":

0 commit comments

Comments
 (0)