And waits for them. That's pointless.
LOG_DEBUG(log, "Source part {} for {} is not ready; will try to fetch it instead", source_part_name, entry.new_part_name);
        return false;
    }
    if (source_part->name != source_part_name)
    {
        LOG_WARNING(log, "Part " + source_part_name + " is covered by " + source_part->name
                    + " but should be mutated to " + entry.new_part_name + ". "
                    + "Possibly the mutation of this part is not needed and will be skipped. This shouldn't happen often.");
        return false;
    }
    
    size_t estimated_space_for_result = MergeTreeDataMergerMutator::estimateNeededDiskSpace({source_part});
    if (entry.create_time + storage_settings_ptr->prefer_fetch_merged_part_time_threshold.totalSeconds() <= time(nullptr)
        && estimated_space_for_result >= storage_settings_ptr->prefer_fetch_merged_part_size_threshold)
    {
        
        
        String replica = findReplicaHavingPart(entry.new_part_name, true);    
        if (!replica.empty())
        {
            LOG_DEBUG(log, "Prefer to fetch {} from replica {}", entry.new_part_name, replica);
            return false;
        }
    }
    MergeTreePartInfo new_part_info = MergeTreePartInfo::fromPartName(
        entry.new_part_name, format_version);
    MutationCommands commands = queue.getMutationCommands(source_part, new_part_info.mutation);
    
    
    ReservationPtr reserved_space = reserveSpace(estimated_space_for_result, source_part->volume);