28#include <unordered_map>
52 <<
", root: " << block.
root <<
"}";
65 return left == other.left &&
right == other.right &&
ref == other.ref;
108 throw std::runtime_error(
format(
"Unable to delete block number ",
110 " 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, current max block number at that index: ",
145 throw std::runtime_error(
format(
"Unable to store block number ",
147 " for retrieval by index, block numbers is of invalid size: ",
154 throw std::runtime_error(
format(
"Unable to store block number ",
156 " for retrieval by index, current max block number at that index: ",
173 LMDBTreeStore(std::string directory, std::string name, uint64_t mapSizeKb, uint64_t maxNumReaders);
180 const std::string&
get_name()
const;
219 template <
typename LeafType,
typename TxType>
222 template <
typename LeafType>
231 template <
typename TxType>
236 template <
typename TxType>
258template <
typename LeafType,
typename TxType>
262 std::vector<uint8_t>
data;
265 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(leafData);
270template <
typename LeafType>
274 msgpack::pack(
buffer, leafData);
283 std::vector<uint8_t>
data;
286 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)
void write_leaf_key_by_index(const fr &leafKey, const index_t &index, WriteTransaction &tx)
LMDBDatabase::Ptr _indexToBlockDatabase
bool find_block_for_index(const index_t &index, block_number_t &blockNumber, ReadTransaction &tx)
void delete_all_leaf_keys_before_or_equal_index(const index_t &index, WriteTransaction &tx)
void delete_all_leaf_keys_after_or_equal_index(const index_t &index, WriteTransaction &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
void read_all_leaf_keys_after_or_equal_index(const index_t &index, std::vector< bb::fr > &leafKeys, TxType &tx)
bool read_node(const fr &nodeHash, NodePayload &nodeData, ReadTransaction &tx)
const std::string & get_name() const
bool read_leaf_key_by_index(const index_t &index, fr &leafKey, TxType &tx)
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)
void read_all_leaf_keys_before_or_equal_index(const index_t &index, std::vector< bb::fr > &leafKeys, TxType &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< FF > data
uint8_t buffer[RANDOM_BUFFER_SIZE]
#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)
bool contains(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