And waits for them. That's pointless.
future_merged_part, disk_space, can_merge, partition_id, final, metadata_snapshot, &disable_reason, query_context->getSettingsRef().optimize_skip_merged_partitions);
                }
                
                if (select_decision == SelectPartsDecision::NOTHING_TO_MERGE)
                    break;
                if (select_decision != SelectPartsDecision::SELECTED)
                {
                    constexpr const char * message_fmt = "Cannot select parts for optimization: {}";
                    if (disable_reason.empty())
                        disable_reason = "unknown reason";
                    LOG_INFO(log, message_fmt, disable_reason);
                    return handle_noop(fmt::format(message_fmt, disable_reason));
                }
                ReplicatedMergeTreeLogEntryData merge_entry;
                CreateMergeEntryResult create_result = createLogEntryToMergeParts(
                    zookeeper, future_merged_part.parts,
                    future_merged_part.name, future_merged_part.uuid, future_merged_part.type,
                    deduplicate, deduplicate_by_columns,
                    &merge_entry, can_merge.getVersion(), future_merged_part.merge_type);
                if (create_result == CreateMergeEntryResult::MissingPart)
                    return handle_noop("Can't create merge queue node in ZooKeeper, because some parts are missing");
                if (create_result == CreateMergeEntryResult::LogUpdated)
                    continue;
                merge_entries.push_back(std::move(merge_entry));
                break;
            }
            if (try_no == max_retries)
                return handle_noop("Can't create merge queue node in ZooKeeper, because log was updated in every of "
                    + toString(max_retries) + " tries");
        }