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  }