#pragma once #include #include #include #include namespace DB { class MergeTreeData; class MergeTreeWriteAheadLog { public: constexpr static auto WAL_FILE_NAME = "wal"; constexpr static auto WAL_FILE_EXTENSION = ".bin"; constexpr static size_t MAX_WAL_BYTES = 1024 * 1024 * 1024; MergeTreeWriteAheadLog(const MergeTreeData & storage_, const DiskPtr & disk_, const String & name = String(WAL_FILE_NAME) + WAL_FILE_EXTENSION); void write(const Block & block, const String & part_name); std::vector restore(); private: void init(); void rotate(); const MergeTreeData & storage; DiskPtr disk; String path; std::unique_ptr out; std::unique_ptr block_out; Int64 min_block_number = std::numeric_limits::max(); Int64 max_block_number = std::numeric_limits::min(); mutable std::mutex write_mutex; }; }