26#include <unordered_map>
38 return value_cmp<numeric::uint256_t>(
a,
b);
43 if (
a->mv_size !=
b->mv_size) {
46 if (
a->mv_size == 1) {
47 return value_cmp<uint8_t>(
a,
b);
49 return value_cmp<uint64_t>(
a,
b);
54 return value_cmp<uint64_t>(
a,
b);
58 std::string directory, std::string name, uint64_t mapSizeKb, uint64_t maxNumReaders,
bool ephemeral)
59 :
LMDBStoreBase(directory, mapSizeKb, maxNumReaders, 5, ephemeral)
60 , _name(
std::move(name))
120 msgpack::pack(
buffer, blockData);
137 std::vector<uint8_t>
data;
140 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(blockData);
151 std::vector<uint8_t>
data;
156 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(payload);
163 msgpack::pack(
buffer, payload);
171 std::vector<uint8_t>
data;
178 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(payload);
195 std::vector<uint8_t>
data;
202 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(payload);
213 msgpack::pack(
buffer, payload);
221 msgpack::pack(
buffer, metaData);
230 std::vector<uint8_t>
data;
233 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(metaData);
257 throw std::runtime_error(
"Failed to find node when attempting to increase reference count");
281 throw std::runtime_error(
"Failed to find node when attempting to decrease reference count");
283 if (--nodeData.
ref == 0) {
304 auto is_valid = [&](
const MDB_val&
data) {
307 return tmp < sizeLimit.value();
309 if (!sizeLimit.has_value()) {
320 std::vector<uint8_t>
data;
323 msgpack::unpack((
const char*)
data.data(),
data.size()).get().convert(nodeData);
331 msgpack::pack(
buffer, nodeData);
void set_or_increment_node_reference_count(const fr &nodeHash, NodePayload &nodeData, WriteTransaction &tx)
bool get_node_data(const fr &nodeHash, NodePayload &nodeData, TxType &tx)
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)
bool read_node(const fr &nodeHash, NodePayload &nodeData, ReadTransaction &tx)
const std::string & get_name() const
LMDBTreeStore(std::string directory, std::string name, uint64_t mapSizeKb, uint64_t maxNumReaders, bool ephemeral=false)
void delete_leaf_by_hash(const fr &leafHash, WriteTransaction &tx)
void decrement_node_reference_count(const fr &nodeHash, NodePayload &nodeData, WriteTransaction &tx)
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
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)
std::unique_ptr< LMDBDatabaseCreationTransaction > Ptr
LMDBEnvironment::SharedPtr _environment
LMDBDatabaseCreationTransaction::Ptr create_db_transaction() const
bool get_value_or_greater(T &key, K &data, const LMDBDatabase &db) const
bool get_value(T &key, std::vector< uint8_t > &data, const LMDBDatabase &db) const
bool get_value_or_previous(T &key, K &data, const LMDBDatabase &db, const std::function< bool(const MDB_val &)> &is_valid) const
void put_value(T &key, Value &data, const LMDBDatabase &db)
void delete_value(T &key, const LMDBDatabase &db)
std::unique_ptr< uint8_t[]> buffer
int block_key_cmp(const MDB_val *a, const MDB_val *b)
const std::string LEAF_PREIMAGES_DB
const std::string NODES_DB
uint64_t BlockMetaKeyType
const std::string BLOCK_INDICES_DB
uint64_t LeafIndexKeyType
const std::string BLOCKS_DB
int fr_key_cmp(const MDB_val *a, const MDB_val *b)
const std::string LEAF_INDICES_DB
int index_key_cmp(const MDB_val *a, const MDB_val *b)
int size_cmp(const MDB_val *a, const MDB_val *b)
void deserialise_key(void *data, uint8_t &key)
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)
block_number_t get_min_block_number()
uint64_t physicalFileSize
DBStats blockIndicesDBStats
DBStats leafIndicesDBStats
DBStats leafPreimagesDBStats