And waits for them. That's pointless.
Int64 source_data_version{};
    Stopwatch watch;
    std::atomic<Float64> progress{};
    std::atomic<bool> is_cancelled{};
    UInt64 total_size_bytes_compressed{};
    UInt64 total_size_marks{};
    UInt64 total_rows_count{};
    std::atomic<UInt64> bytes_read_uncompressed{};
    std::atomic<UInt64> bytes_written_uncompressed{};
    
    std::atomic<UInt64> rows_read{};
    std::atomic<UInt64> rows_written{};
    
    std::atomic<UInt64> columns_written{};
    MemoryTracker memory_tracker{VariableContext::Process};
    MemoryTracker * background_thread_memory_tracker;
    MemoryTracker * background_thread_memory_tracker_prev_parent = nullptr;
    UInt64 thread_id;
    MergeType merge_type;
    
    std::atomic<MergeAlgorithm> merge_algorithm;
    MergeListElement(const StorageID & table_id_, const FutureMergedMutatedPart & future_part);
    MergeInfo getInfo() const;
    ~MergeListElement();
};
using MergeListEntry = BackgroundProcessListEntry<MergeListElement, MergeInfo>;
/** Maintains a list of currently running merges.
  * For implementation of system.merges table.
  */
class MergeList final : public BackgroundProcessList<MergeListElement, MergeInfo>