#pragma once #include #include #include #include #include #include #include #include #include namespace DB { class MergeFromLogEntryTask : public ReplicatedMergeMutateTaskBase { public: MergeFromLogEntryTask( ReplicatedMergeTreeQueue::SelectedEntryPtr selected_entry_, StorageReplicatedMergeTree & storage_, IExecutableTask::TaskResultCallback & task_result_callback_); Priority getPriority() const override { return priority; } protected: /// Both return false if we can't execute merge. ReplicatedMergeMutateTaskBase::PrepareResult prepare() override; bool finalize(ReplicatedMergeMutateTaskBase::PartLogWriter write_part_log) override; bool executeInnerTask() override { return merge_task->execute(); } private: TableLockHolder table_lock_holder{nullptr}; MergeTreeData::DataPartsVector parts; MergeTreeData::TransactionUniquePtr transaction_ptr{nullptr}; std::optional zero_copy_lock; StopwatchUniquePtr stopwatch_ptr{nullptr}; MergeTreeData::MutableDataPartPtr part; Priority priority; MergeTaskPtr merge_task; pcg64 rng; }; using MergeFromLogEntryTaskPtr = std::shared_ptr; }