Better concurrent parts removal with zero copy

This commit is contained in:
alesapin 2023-05-07 14:02:24 +02:00
parent bcafd7002a
commit a2ed457219

View File

@ -2451,12 +2451,14 @@ void MergeTreeData::clearPartsFromFilesystemImpl(const DataPartsVector & parts_t
std::mutex part_names_mutex;
ThreadPool pool(CurrentMetrics::MergeTreePartsCleanerThreads, CurrentMetrics::MergeTreePartsCleanerThreadsActive, num_threads);
/// This flag disallow straightforward concurrent parts removal. It's required only in case
/// when we have parts on zero-copy disk + at least some of them were mutated.
bool has_zero_copy_parts = false;
if (settings->allow_remote_fs_zero_copy_replication && dynamic_cast<StorageReplicatedMergeTree *>(this) != nullptr)
{
has_zero_copy_parts = std::any_of(
parts_to_remove.begin(), parts_to_remove.end(),
[] (const auto & data_part) { return data_part->isStoredOnRemoteDiskWithZeroCopySupport(); }
[] (const auto & data_part) { return data_part->isStoredOnRemoteDiskWithZeroCopySupport() && data_part->info.getMutationVersion() > 0; }
);
}