Skip to content

Commit

Permalink
Replace remaining usages of MDB_dbi with ::lmdb::dbi
Browse files Browse the repository at this point in the history
  • Loading branch information
clemahieu committed Sep 10, 2024
1 parent 6ce753c commit ff962bf
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 15 deletions.
6 changes: 3 additions & 3 deletions nano/store/lmdb/iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ template <typename T, typename U>
class iterator : public iterator_impl<T, U>
{
public:
iterator (store::transaction const & transaction_a, ::lmdb::env const & env_a, MDB_dbi db_a, MDB_val const & val_a = MDB_val{}, bool const direction_asc = true) :
iterator (store::transaction const & transaction_a, ::lmdb::env const & env_a, ::lmdb::dbi const & db_a, MDB_val const & val_a = MDB_val{}, bool const direction_asc = true) :
nano::store::iterator_impl<T, U> (transaction_a)
{
auto status (mdb_cursor_open (tx (transaction_a), db_a, &cursor));
Expand Down Expand Up @@ -176,7 +176,7 @@ template <typename T, typename U>
class merge_iterator : public iterator_impl<T, U>
{
public:
merge_iterator (store::transaction const & transaction_a, MDB_dbi db1_a, MDB_dbi db2_a) :
merge_iterator (store::transaction const & transaction_a, ::lmdb::dbi const & db1_a, ::lmdb::dbi const & db2_a) :
impl1 (std::make_unique<nano::store::lmdb::iterator<T, U>> (transaction_a, db1_a)),
impl2 (std::make_unique<nano::store::lmdb::iterator<T, U>> (transaction_a, db2_a))
{
Expand All @@ -188,7 +188,7 @@ class merge_iterator : public iterator_impl<T, U>
{
}

merge_iterator (store::transaction const & transaction_a, MDB_dbi db1_a, MDB_dbi db2_a, MDB_val const & val_a) :
merge_iterator (store::transaction const & transaction_a, ::lmdb::dbi const & db1_a, ::lmdb::dbi const & db2_a, MDB_val const & val_a) :
impl1 (std::make_unique<nano::store::lmdb::iterator<T, U>> (transaction_a, db1_a, val_a)),
impl2 (std::make_unique<nano::store::lmdb::iterator<T, U>> (transaction_a, db2_a, val_a))
{
Expand Down
24 changes: 15 additions & 9 deletions nano/store/lmdb/lmdb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ int nano::store::lmdb::component::drop (store::write_transaction const & transac
{
try
{
::lmdb::dbi_drop (tx (transaction_a), table_to_dbi (table_a), true);
table_to_dbi (table_a).drop (tx (transaction_a), true);
return 0;
}
catch (::lmdb::runtime_error const &)
Expand All @@ -380,24 +380,24 @@ int nano::store::lmdb::component::drop (store::write_transaction const & transac
}
}

void nano::store::lmdb::component::clear (store::write_transaction const & transaction_a, MDB_dbi handle_a)
void nano::store::lmdb::component::clear (store::write_transaction const & transaction_a, ::lmdb::dbi & handle_a)
{
::lmdb::dbi_drop (tx (transaction_a), handle_a, false);
handle_a.drop (tx (transaction_a), false);
}

uint64_t nano::store::lmdb::component::count (store::transaction const & transaction_a, tables table_a) const
{
return count (transaction_a, table_to_dbi (table_a));
}

uint64_t nano::store::lmdb::component::count (store::transaction const & transaction_a, MDB_dbi db_a) const
uint64_t nano::store::lmdb::component::count (store::transaction const & transaction_a, ::lmdb::dbi const & db_a) const
{
MDB_stat stats;
::lmdb::dbi_stat (tx (transaction_a), db_a, &stats);
return (stats.ms_entries);
}

MDB_dbi nano::store::lmdb::component::table_to_dbi (tables table_a) const
auto nano::store::lmdb::component::table_to_dbi (tables table_a) -> ::lmdb::dbi &
{
switch (table_a)
{
Expand Down Expand Up @@ -427,6 +427,11 @@ MDB_dbi nano::store::lmdb::component::table_to_dbi (tables table_a) const
}
}

auto nano::store::lmdb::component::table_to_dbi (tables table_a) const -> ::lmdb::dbi const &
{
return const_cast<component *> (this)->table_to_dbi (table_a);
}

bool nano::store::lmdb::component::not_found (int status) const
{
return (status_code_not_found () == status);
Expand Down Expand Up @@ -455,9 +460,10 @@ bool nano::store::lmdb::component::copy_db (std::filesystem::path const & destin
void nano::store::lmdb::component::rebuild_db (store::write_transaction const & transaction_a)
{
// Tables with uint256_union key
std::vector<MDB_dbi> tables = { account_store.accounts_handle, block_store.blocks_handle, pruned_store.pruned_handle, confirmation_height_store.confirmation_height_handle };
for (auto const & table : tables)
std::vector<::lmdb::dbi *> tables = { &account_store.accounts_handle, &block_store.blocks_handle, &pruned_store.pruned_handle, &confirmation_height_store.confirmation_height_handle };
for (auto & table_p : tables)
{
auto & table = *table_p;
auto temp = ::lmdb::dbi::open (tx (transaction_a), "temp_table", MDB_CREATE);
// Copy all values to temporary table
for (auto i (store::iterator<nano::uint256_union, nano::store::lmdb::db_val> (std::make_unique<nano::store::lmdb::iterator<nano::uint256_union, nano::store::lmdb::db_val>> (transaction_a, env, table))), n (store::iterator<nano::uint256_union, nano::store::lmdb::db_val> (nullptr)); i != n; ++i)
Expand All @@ -467,7 +473,7 @@ void nano::store::lmdb::component::rebuild_db (store::write_transaction const &
}
release_assert (count (transaction_a, table) == count (transaction_a, temp));
// Clear existing table
::lmdb::dbi_drop (tx (transaction_a), table, false);
table.drop (tx (transaction_a), false);
// Put values from copy
for (auto i (store::iterator<nano::uint256_union, nano::store::lmdb::db_val> (std::make_unique<nano::store::lmdb::iterator<nano::uint256_union, nano::store::lmdb::db_val>> (transaction_a, env, temp))), n (store::iterator<nano::uint256_union, nano::store::lmdb::db_val> (nullptr)); i != n; ++i)
{
Expand All @@ -488,7 +494,7 @@ void nano::store::lmdb::component::rebuild_db (store::write_transaction const &
release_assert_success (s);
}
release_assert (count (transaction_a, pending_store.pending_handle) == count (transaction_a, temp));
::lmdb::dbi_drop (tx (transaction_a), pending_store.pending_handle, false);
pending_store.pending_handle.drop (tx (transaction_a), false);
// Put values from copy
for (auto i (store::iterator<nano::pending_key, nano::pending_info> (std::make_unique<nano::store::lmdb::iterator<nano::pending_key, nano::pending_info>> (transaction_a, env, temp))), n (store::iterator<nano::pending_key, nano::pending_info> (nullptr)); i != n; ++i)
{
Expand Down
7 changes: 4 additions & 3 deletions nano/store/lmdb/lmdb.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ class component : public nano::store::component

bool init_error () const override;

uint64_t count (store::transaction const &, MDB_dbi) const;
uint64_t count (store::transaction const &, ::lmdb::dbi const &) const;
std::string error_string (int status) const override;

private:
Expand All @@ -118,7 +118,7 @@ class component : public nano::store::component
void open_databases (store::transaction const &, unsigned);

int drop (store::write_transaction const & transaction_a, tables table_a) override;
void clear (store::write_transaction const & transaction_a, MDB_dbi handle_a);
void clear (store::write_transaction const & transaction_a, ::lmdb::dbi & handle_a);

bool not_found (int status) const override;
bool success (int status) const override;
Expand All @@ -131,7 +131,8 @@ class component : public nano::store::component
}
int status_code_not_found () const override;

MDB_dbi table_to_dbi (tables table_a) const;
auto table_to_dbi (tables table_a) -> ::lmdb::dbi &;
auto table_to_dbi (tables table_a) const -> ::lmdb::dbi const &;

mutable nano::mdb_txn_tracker mdb_txn_tracker;
nano::store::lmdb::txn_callbacks create_txn_callbacks () const;
Expand Down

0 comments on commit ff962bf

Please sign in to comment.