Start the compactor.
(ctx context.Context)
| 631 | |
| 632 | // Start the compactor. |
| 633 | func (c *Compactor) starting(ctx context.Context) error { |
| 634 | begin := time.Now() |
| 635 | defer func() { |
| 636 | c.CompactorStartDurationSeconds.Set(time.Since(begin).Seconds()) |
| 637 | level.Info(c.logger).Log("msg", "compactor started", "duration", time.Since(begin), "duration_ms", time.Since(begin).Milliseconds()) |
| 638 | }() |
| 639 | |
| 640 | var err error |
| 641 | |
| 642 | // Create bucket client. |
| 643 | c.bucketClient, err = c.bucketClientFactory(ctx) |
| 644 | if err != nil { |
| 645 | return errors.Wrap(err, "failed to create bucket client") |
| 646 | } |
| 647 | |
| 648 | // Create blocks compactor dependencies. |
| 649 | c.blocksCompactor, c.blocksPlannerFactory, err = c.blocksCompactorFactory(ctx, c.compactorCfg, c.logger, c.registerer) |
| 650 | if err != nil { |
| 651 | return errors.Wrap(err, "failed to initialize compactor dependencies") |
| 652 | } |
| 653 | |
| 654 | // Wrap the bucket client to write block deletion marks in the global location too. |
| 655 | c.bucketClient = bucketindex.BucketWithGlobalMarkers(c.bucketClient) |
| 656 | |
| 657 | cleanerBucketClient := c.bucketClient |
| 658 | if c.compactorCfg.CleanerCachingBucketEnabled { |
| 659 | cleanerBucketClient, err = cortex_tsdb.CreateCachingBucketForCompactor(c.storageCfg.BucketStore.MetadataCache, true, c.bucketClient, c.logger, extprom.WrapRegistererWith(prometheus.Labels{"component": "cleaner"}, c.registerer)) |
| 660 | if err != nil { |
| 661 | return errors.Wrap(err, "create caching bucket for cleaner") |
| 662 | } |
| 663 | } |
| 664 | |
| 665 | if c.compactorCfg.CachingBucketEnabled { |
| 666 | c.bucketClient, err = cortex_tsdb.CreateCachingBucketForCompactor(c.storageCfg.BucketStore.MetadataCache, false, c.bucketClient, c.logger, extprom.WrapRegistererWith(prometheus.Labels{"component": "compactor"}, c.registerer)) |
| 667 | if err != nil { |
| 668 | return errors.Wrap(err, "create caching bucket for compactor") |
| 669 | } |
| 670 | } |
| 671 | |
| 672 | // Create the users scanner. |
| 673 | c.usersScanner, err = users.NewScanner(c.storageCfg.UsersScanner, c.bucketClient, c.logger, extprom.WrapRegistererWith(prometheus.Labels{"component": "compactor"}, c.registerer)) |
| 674 | if err != nil { |
| 675 | return errors.Wrap(err, "failed to create users scanner") |
| 676 | } |
| 677 | |
| 678 | var cleanerRingLifecyclerID = "default-cleaner" |
| 679 | // Initialize the compactors ring if sharding is enabled. |
| 680 | if c.compactorCfg.ShardingEnabled { |
| 681 | lifecyclerCfg := c.compactorCfg.ShardingRing.ToLifecyclerConfig() |
| 682 | var delegate ring.LifecyclerDelegate |
| 683 | delegate = &ring.DefaultLifecyclerDelegate{} |
| 684 | if c.compactorCfg.ShardingRing.AutoForgetDelay > 0 { |
| 685 | delegate = ring.NewLifecyclerAutoForgetDelegate(c.compactorCfg.ShardingRing.AutoForgetDelay, delegate, c.logger) |
| 686 | } |
| 687 | c.ringLifecycler, err = ring.NewLifecyclerWithDelegate(lifecyclerCfg, ring.NewNoopFlushTransferer(), "compactor", ringKey, true, false, c.logger, prometheus.WrapRegistererWithPrefix("cortex_", c.registerer), delegate) |
| 688 | if err != nil { |
| 689 | return errors.Wrap(err, "unable to initialize compactor ring lifecycler") |
| 690 | } |
nothing calls this directly
no test coverage detected