28#include <unordered_map>
52 <<
", root: " << block.
root <<
"}";
65 return left == other.left &&
right == other.right &&
ref == other.ref;
97 throw std::runtime_error(
format(
"Unable to delete block number ",
99 " for retrieval by index, current max block number at that index: ",
123 throw std::runtime_error(
format(
"Unable to store block number ",
125 " for retrieval by index, current max block number at that index: ",
134 throw std::runtime_error(
format(
"Unable to store block number ",
136 " for retrieval by index, block numbers is of invalid size: ",
143 throw std::runtime_error(
format(
"Unable to store block number ",
145 " for retrieval by index, current max block number at that index: ",
162 LMDBTreeStore(std::string directory, std::string name, uint64_t mapSizeKb, uint64_t maxNumReaders);
169 const std::string&
get_name()
const;
208 template <
typename LeafType,
typename TxType>
211 template <
typename LeafType>
233template <
typename LeafType,
typename TxType>
237 std::vector<uint8_t>
data;
240 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(leafData);
245template <
typename LeafType>
249 msgpack::pack(
buffer, leafData);
258 std::vector<uint8_t>
data;
261 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(nodeData);
void write_leaf_by_hash(const fr &leafHash, const LeafType &leafData, WriteTransaction &tx)
void set_or_increment_node_reference_count(const fr &nodeHash, NodePayload &nodeData, WriteTransaction &tx)
LMDBTreeStore(const LMDBTreeStore &other)=delete
std::shared_ptr< LMDBTreeStore > SharedPtr
bool get_node_data(const fr &nodeHash, NodePayload &nodeData, TxType &tx)
std::unique_ptr< LMDBTreeStore > Ptr
void delete_block_data(const block_number_t &blockNumber, WriteTransaction &tx)
LMDBDatabase::Ptr _indexToBlockDatabase
bool find_block_for_index(const index_t &index, block_number_t &blockNumber, ReadTransaction &tx)
void write_node(const fr &nodeHash, const NodePayload &nodeData, WriteTransaction &tx)
void write_block_data(const block_number_t &blockNumber, const BlockPayload &blockData, WriteTransaction &tx)
void write_leaf_index(const fr &leafValue, const index_t &leafIndex, WriteTransaction &tx)
void delete_block_index(const index_t &sizeAtBlock, const block_number_t &blockNumber, WriteTransaction &tx)
~LMDBTreeStore() override=default
bool read_node(const fr &nodeHash, NodePayload &nodeData, ReadTransaction &tx)
const std::string & get_name() const
void delete_leaf_by_hash(const fr &leafHash, WriteTransaction &tx)
void decrement_node_reference_count(const fr &nodeHash, NodePayload &nodeData, WriteTransaction &tx)
LMDBTreeStore & operator=(LMDBTreeStore &&other)=delete
void write_meta_data(const TreeMeta &metaData, WriteTransaction &tx)
bool read_block_data(const block_number_t &blockNumber, BlockPayload &blockData, ReadTransaction &tx)
void get_stats(TreeDBStats &stats, ReadTransaction &tx)
LMDBDatabase::Ptr _blockDatabase
LMDBDatabase::Ptr _leafHashToPreImageDatabase
LMDBTreeStore(LMDBTreeStore &&other)=delete
LMDBTreeStore & operator=(const LMDBTreeStore &other)=delete
bool read_leaf_by_hash(const fr &leafHash, LeafType &leafData, TxType &tx)
void write_block_index_data(const block_number_t &blockNumber, const index_t &sizeAtBlock, WriteTransaction &tx)
void delete_leaf_index(const fr &leafValue, WriteTransaction &tx)
void increment_node_reference_count(const fr &nodeHash, WriteTransaction &tx)
LMDBDatabase::Ptr _nodeDatabase
fr find_low_leaf(const fr &leafValue, index_t &index, const std::optional< index_t > &sizeLimit, ReadTransaction &tx)
LMDBDatabase::Ptr _leafKeyToIndexDatabase
bool read_meta_data(TreeMeta &metaData, ReadTransaction &tx)
bool read_leaf_index(const fr &leafValue, index_t &leafIndex, TxType &tx)
std::unique_ptr< LMDBDatabase > Ptr
void put_value(T &key, Value &data, const LMDBDatabase &db)
std::string format(Args... args)
const std::vector< MemoryValue > data
std::unique_ptr< uint8_t[]> buffer
#define MSGPACK_FIELDS(...)
std::ostream & operator<<(std::ostream &os, const BlockPayload &block)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
void add_block(const block_number_t &blockNumber)
void delete_block(const block_number_t &blockNumber)
std::vector< block_number_t > blockNumbers
block_number_t get_min_block_number()
block_number_t blockNumber
std::optional< fr > right