@@ -623,28 +623,31 @@ void TColumnShard::StartCompaction(const std::shared_ptr<NPrioritiesQueue::TAllo
623623 Counters.GetCSCounters ().OnSetupCompaction ();
624624 BackgroundController.ResetWaitingPriority ();
625625
626- auto indexChanges = TablesManager.MutablePrimaryIndex ().StartCompaction (DataLocksManager);
627- if (!indexChanges) {
626+ auto indexChangesList = TablesManager.MutablePrimaryIndex ().StartCompaction (DataLocksManager);
627+
628+ if (indexChangesList.empty ()) {
628629 LOG_S_DEBUG (" Compaction not started: cannot prepare compaction at tablet " << TabletID ());
629630 return ;
630631 }
631632
632- auto & compaction = *VerifyDynamicCast<NOlap::NCompaction::TGeneralCompactColumnEngineChanges*>(indexChanges.get ());
633- compaction.SetActivityFlag (GetTabletActivity ());
634- compaction.SetQueueGuard (guard);
635- compaction.Start (*this );
633+ for (const auto & indexChanges : indexChangesList) {
634+ auto & compaction = *VerifyDynamicCast<NOlap::NCompaction::TGeneralCompactColumnEngineChanges*>(indexChanges.get ());
635+ compaction.SetActivityFlag (GetTabletActivity ());
636+ compaction.SetQueueGuard (guard);
637+ compaction.Start (*this );
636638
637- auto actualIndexInfo = TablesManager.GetPrimaryIndex ()->GetVersionedIndexReadonlyCopy ();
638- static std::shared_ptr<NOlap::NGroupedMemoryManager::TStageFeatures> stageFeatures =
639- NOlap::NGroupedMemoryManager::TCompMemoryLimiterOperator::BuildStageFeatures (" COMPACTION" , NOlap::TGlobalLimits::GeneralCompactionMemoryLimit);
640- auto processGuard = NOlap::NGroupedMemoryManager::TCompMemoryLimiterOperator::BuildProcessGuard ({ stageFeatures });
641- NOlap::NDataFetcher::TRequestInput rInput (compaction.GetSwitchedPortions (), actualIndexInfo,
642- NOlap::NBlobOperations::EConsumer::GENERAL_COMPACTION, compaction.GetTaskIdentifier (), processGuard);
643- auto env = std::make_shared<NOlap::NDataFetcher::TEnvironment>(DataAccessorsManager.GetObjectPtrVerified (), StoragesManager);
644- NOlap::NDataFetcher::TPortionsDataFetcher::StartFullPortionsFetching (std::move (rInput),
645- std::make_shared<TCompactionExecutor>(
646- TabletID (), SelfId (), indexChanges, actualIndexInfo, Counters.GetIndexationCounters (), GetLastCompletedTx (), TabletActivityImpl),
647- env, NConveyorComposite::ESpecialTaskCategory::Compaction);
639+ auto actualIndexInfo = TablesManager.GetPrimaryIndex ()->GetVersionedIndexReadonlyCopy ();
640+ static std::shared_ptr<NOlap::NGroupedMemoryManager::TStageFeatures> stageFeatures =
641+ NOlap::NGroupedMemoryManager::TCompMemoryLimiterOperator::BuildStageFeatures (" COMPACTION" , NOlap::TGlobalLimits::GeneralCompactionMemoryLimit);
642+ auto processGuard = NOlap::NGroupedMemoryManager::TCompMemoryLimiterOperator::BuildProcessGuard ({ stageFeatures });
643+ NOlap::NDataFetcher::TRequestInput rInput (compaction.GetSwitchedPortions (), actualIndexInfo,
644+ NOlap::NBlobOperations::EConsumer::GENERAL_COMPACTION, compaction.GetTaskIdentifier (), processGuard);
645+ auto env = std::make_shared<NOlap::NDataFetcher::TEnvironment>(DataAccessorsManager.GetObjectPtrVerified (), StoragesManager);
646+ NOlap::NDataFetcher::TPortionsDataFetcher::StartFullPortionsFetching (std::move (rInput),
647+ std::make_shared<TCompactionExecutor>(
648+ TabletID (), SelfId (), indexChanges, actualIndexInfo, Counters.GetIndexationCounters (), GetLastCompletedTx (), TabletActivityImpl),
649+ env, NConveyorComposite::ESpecialTaskCategory::Compaction);
650+ }
648651}
649652
650653class TDataAccessorsSubscriberBase : public NOlap ::IDataAccessorRequestsSubscriber {
0 commit comments