github.com/grafana/pyroscope@v1.18.0/pkg/compactor/split_merge_compactor.go (about) 1 // SPDX-License-Identifier: AGPL-3.0-only 2 // Provenance-includes-location: https://github.com/grafana/mimir/blob/main/pkg/compactor/split_merge_compactor.go 3 // Provenance-includes-license: Apache-2.0 4 // Provenance-includes-copyright: The Cortex Authors. 5 package compactor 6 7 import ( 8 "context" 9 10 "github.com/go-kit/log" 11 "github.com/prometheus/client_golang/prometheus" 12 ) 13 14 func splitAndMergeGrouperFactory(_ context.Context, cfg Config, cfgProvider ConfigProvider, userID string, logger log.Logger, _ prometheus.Registerer) Grouper { 15 return NewSplitAndMergeGrouper( 16 userID, 17 cfg.BlockRanges.ToMilliseconds(), 18 uint32(cfgProvider.CompactorSplitAndMergeShards(userID)), 19 uint32(cfgProvider.CompactorSplitAndMergeStageSize(userID)), 20 uint32(cfgProvider.CompactorSplitGroups(userID)), 21 logger) 22 } 23 24 func splitAndMergePlannerFactory(cfg Config) Planner { 25 return NewSplitAndMergePlanner(cfg.BlockRanges.ToMilliseconds()) 26 } 27 28 func splitAndMergeCompactorFactory(_ context.Context, cfg Config, cfgProvider ConfigProvider, userID string, logger log.Logger, metrics *CompactorMetrics) (Compactor, error) { 29 splitBy := getCompactionSplitBy(cfg.CompactionSplitBy) 30 if splitBy == nil { 31 return nil, errInvalidCompactionSplitBy 32 } 33 return &BlockCompactor{ 34 blockOpenConcurrency: cfg.MaxOpeningBlocksConcurrency, 35 downsamplerEnabled: cfg.DownsamplerEnabled && cfgProvider.CompactorDownsamplerEnabled(userID), 36 splitBy: splitBy, 37 logger: logger, 38 metrics: metrics, 39 }, nil 40 } 41 42 // configureSplitAndMergeCompactor updates the provided configuration injecting the split-and-merge compactor. 43 func configureSplitAndMergeCompactor(cfg *Config) { 44 cfg.BlocksGrouperFactory = splitAndMergeGrouperFactory 45 cfg.BlocksCompactorFactory = splitAndMergeCompactorFactory 46 cfg.BlocksPlannerFactory = splitAndMergePlannerFactory 47 }