6#ifndef OPENCBDC_TX_SRC_RAFT_LOG_STORE_H_
7#define OPENCBDC_TX_SRC_RAFT_LOG_STORE_H_
11#include <leveldb/db.h>
12#include <libnuraft/log_store.hxx>
31 [[nodiscard]]
auto load(
const std::string& db_dir) -> bool;
35 [[nodiscard]]
auto next_slot() const -> uint64_t override;
39 [[nodiscard]] auto
start_index() const -> uint64_t override;
45 -> nuraft::ptr<nuraft::log_entry> override;
50 auto
append(nuraft::ptr<nuraft::log_entry>& entry)
57 nuraft::ptr<nuraft::log_entry>& entry) override;
61 = nuraft::ptr<std::vector<nuraft::ptr<nuraft::log_entry>>>;
67 [[nodiscard]] auto
log_entries(uint64_t start, uint64_t end)
74 [[nodiscard]] auto
entry_at(uint64_t index)
75 -> nuraft::ptr<nuraft::log_entry> override;
81 [[nodiscard]] auto
term_at(uint64_t index) -> uint64_t override;
87 [[nodiscard]] auto
pack(uint64_t index, int32_t cnt)
88 -> nuraft::ptr<nuraft::
buffer> override;
100 auto
compact(uint64_t last_log_index) ->
bool override;
104 auto
flush() ->
bool override;
107 std::unique_ptr<leveldb::DB> m_db{};
108 mutable std::mutex m_db_mut{};
109 uint64_t m_next_idx{};
110 uint64_t m_start_idx{};
112 leveldb::ReadOptions m_read_opt;
113 leveldb::WriteOptions m_write_opt;
115 index_comparator m_cmp;
Buffer to store and retrieve byte data.
NuRaft log_store implementation using LevelDB.
log_store(const log_store &other)=delete
auto next_slot() const -> uint64_t override
Return the log index of the next empty log entry.
auto term_at(uint64_t index) -> uint64_t override
Return the log term associated with the log entry at the given index.
auto load(const std::string &db_dir) -> bool
Load the log store from the given LevelDB database directory.
auto pack(uint64_t index, int32_t cnt) -> nuraft::ptr< nuraft::buffer > override
Serialize the given number of log entries from the given index.
~log_store() override=default
log_store(log_store &&other) noexcept
auto flush() -> bool override
Flush any buffered writes to disk.
auto start_index() const -> uint64_t override
Return the first log index stored by the log store.
void apply_pack(uint64_t index, nuraft::buffer &pack) override
Deserialize the given log entries and write them starting at the given log index.
void write_at(uint64_t index, nuraft::ptr< nuraft::log_entry > &entry) override
Write a log entry at the given index.
auto compact(uint64_t last_log_index) -> bool override
Delete log entries from the start of the log up to the given log index.
auto operator=(const log_store &other) -> log_store &=delete
auto last_entry() const -> nuraft::ptr< nuraft::log_entry > override
Return the last log entry in the log store.
auto append(nuraft::ptr< nuraft::log_entry > &entry) -> uint64_t override
Append the given log entry to the end of the log.
nuraft::ptr< std::vector< nuraft::ptr< nuraft::log_entry > > > log_entries_t
List of log entries.
auto entry_at(uint64_t index) -> nuraft::ptr< nuraft::log_entry > override
Return the log entry at the given index.
auto log_entries(uint64_t start, uint64_t end) -> log_entries_t override
Return the log entries in the given range of indices.
auto operator=(log_store &&other) noexcept -> log_store &