And waits for them. That's pointless.
for (const auto it = disk->iterateDirectory(fs::path(relative_data_path) / "detached/"); it->isValid(); it->next())
        {
            MergeTreePartInfo part_info;
            if (!MergeTreePartInfo::tryParsePartName(it->name(), &part_info, format_version) ||
                part_info.partition_id != actual_part_info.partition_id)
                continue;
            const String part_old_name = part_info.getPartName();
            const String part_path = fs::path("detached") / part_old_name;
            const VolumePtr volume = std::make_shared<SingleDiskVolume>("volume_" + part_old_name, disk);
            
            MergeTreeData::MutableDataPartPtr part = createPart(part_new_name, actual_part_info, volume, part_path);
            try
            {
                part->loadColumnsChecksumsIndexes(true, true);
            }
            catch (const Exception&)
            {
                
                
                continue;
            }
            if (entry.part_checksum == part->checksums.getTotalChecksumHex())
            {
                part->modification_time = disk->getLastModified(part->getFullRelativePath()).epochTime();
                return part;
            }
        }
    return {};
}
bool StorageReplicatedMergeTree::executeLogEntry(LogEntry & entry)