Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions nano/core_test/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ unsigned constexpr nano::wallet_store::version_current;
TEST (wallet, no_special_keys_accounts)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -39,7 +39,7 @@ TEST (wallet, no_special_keys_accounts)
TEST (wallet, no_key)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -54,7 +54,7 @@ TEST (wallet, no_key)
TEST (wallet, fetch_locked)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -76,7 +76,7 @@ TEST (wallet, fetch_locked)
TEST (wallet, retrieval)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -98,7 +98,7 @@ TEST (wallet, retrieval)
TEST (wallet, empty_iteration)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -112,7 +112,7 @@ TEST (wallet, empty_iteration)
TEST (wallet, one_item_iteration)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -134,7 +134,7 @@ TEST (wallet, one_item_iteration)
TEST (wallet, two_item_iteration)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
nano::keypair key1;
nano::keypair key2;
Expand Down Expand Up @@ -260,7 +260,7 @@ TEST (wallet, spend_no_previous)
TEST (wallet, find_none)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -273,7 +273,7 @@ TEST (wallet, find_none)
TEST (wallet, find_existing)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -292,7 +292,7 @@ TEST (wallet, find_existing)
TEST (wallet, rekey)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand Down Expand Up @@ -322,7 +322,7 @@ TEST (wallet, rekey)
TEST (wallet, hash_password)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand Down Expand Up @@ -371,7 +371,7 @@ TEST (fan, change)
TEST (wallet, reopen_default_password)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
auto transaction (env.tx_begin_write ());
ASSERT_FALSE (init);
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand Down Expand Up @@ -407,7 +407,7 @@ TEST (wallet, reopen_default_password)
TEST (wallet, representative)
{
auto error (false);
nano::store::lmdb::env env (error, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (error, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (error);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -428,7 +428,7 @@ TEST (wallet, representative)
TEST (wallet, serialize_json_empty)
{
auto error (false);
nano::store::lmdb::env env (error, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (error, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (error);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand All @@ -453,7 +453,7 @@ TEST (wallet, serialize_json_empty)
TEST (wallet, serialize_json_one)
{
auto error (false);
nano::store::lmdb::env env (error, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (error, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (error);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand Down Expand Up @@ -482,7 +482,7 @@ TEST (wallet, serialize_json_one)
TEST (wallet, serialize_json_password)
{
auto error (false);
nano::store::lmdb::env env (error, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (error, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (error);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand Down Expand Up @@ -515,7 +515,7 @@ TEST (wallet, serialize_json_password)
TEST (wallet_store, move)
{
auto error (false);
nano::store::lmdb::env env (error, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (error, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (error);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand Down Expand Up @@ -672,7 +672,7 @@ TEST (wallet, insert_locked)
TEST (wallet, deterministic_keys)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand Down Expand Up @@ -715,7 +715,7 @@ TEST (wallet, deterministic_keys)
TEST (wallet, reseed)
{
bool init;
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
nano::store::lmdb::env env (init, nano::default_logger (), nano::unique_path () / "wallet.ldb");
ASSERT_FALSE (init);
auto transaction (env.tx_begin_write ());
nano::kdf kdf{ nano::dev::network_params.kdf_work };
Expand Down
1 change: 0 additions & 1 deletion nano/node/fwd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ class election_status;
class ledger_notifications;
class local_block_broadcaster;
class local_vote_history;
class logger;
class network;
class network_params;
class node;
Expand Down
4 changes: 2 additions & 2 deletions nano/node/node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ nano::node::node (std::shared_ptr<boost::asio::io_context> io_ctx_a, std::filesy
store{ *store_impl },
unchecked_impl{ std::make_unique<nano::unchecked_map> (config.max_unchecked_blocks, stats, flags.disable_block_processor_unchecked_deletion) },
unchecked{ *unchecked_impl },
wallets_store_impl{ std::make_unique<nano::mdb_wallets_store> (application_path_a / "wallets.ldb", config_a.lmdb_config) },
wallets_store_impl{ std::make_unique<nano::mdb_wallets_store> (logger, application_path_a / "wallets.ldb", config_a.lmdb_config) },
wallets_store{ *wallets_store_impl },
wallets_impl{ std::make_unique<nano::wallets> (wallets_store.init_error (), *this) },
wallets{ *wallets_impl },
Expand Down Expand Up @@ -1029,4 +1029,4 @@ nano::keypair nano::load_or_create_node_id (std::filesystem::path const & applic

return kp;
}
}
}
4 changes: 2 additions & 2 deletions nano/node/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1883,8 +1883,8 @@ auto nano::wallet_store::end (store::transaction const & transaction_a) -> itera
return iterator{ store::iterator{ store::lmdb::iterator::end (env.tx (transaction_a), handle) } };
}

nano::mdb_wallets_store::mdb_wallets_store (std::filesystem::path const & path_a, nano::lmdb_config const & lmdb_config_a) :
environment (error, path_a, nano::store::lmdb::env::options::make ().set_config (lmdb_config_a).override_config_sync (nano::lmdb_config::sync_strategy::always).override_config_map_size (1ULL * 1024 * 1024 * 1024))
nano::mdb_wallets_store::mdb_wallets_store (nano::logger & logger, std::filesystem::path const & path_a, nano::lmdb_config const & lmdb_config_a) :
environment (error, logger, path_a, nano::store::lmdb::env::options::make ().set_config (lmdb_config_a).override_config_sync (nano::lmdb_config::sync_strategy::always).override_config_map_size (1ULL * 1024 * 1024 * 1024))
{
}

Expand Down
3 changes: 2 additions & 1 deletion nano/node/wallet.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include <nano/lib/fwd.hpp>
#include <nano/lib/id_dispenser.hpp>
#include <nano/lib/lmdbconfig.hpp>
#include <nano/lib/locks.hpp>
Expand Down Expand Up @@ -270,7 +271,7 @@ class wallets_store
class mdb_wallets_store final : public wallets_store
{
public:
mdb_wallets_store (std::filesystem::path const &, nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{});
mdb_wallets_store (nano::logger & logger, std::filesystem::path const &, nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{});
nano::store::lmdb::env environment;
bool init_error () const override;
bool error{ false };
Expand Down
2 changes: 1 addition & 1 deletion nano/store/lmdb/lmdb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ nano::store::lmdb::component::component (nano::logger & logger_a, std::filesyste
rep_weight_store{ *this },
database_path{ path_a },
logger{ logger_a },
env (error, path_a, nano::store::lmdb::env::options::make ().set_config (lmdb_config_a).set_use_no_mem_init (true)),
env (error, logger, path_a, nano::store::lmdb::env::options::make ().set_config (lmdb_config_a).set_use_no_mem_init (true)),
mdb_txn_tracker (logger_a, txn_tracking_config_a, block_processor_batch_max_time_a),
txn_tracking_enabled (txn_tracking_config_a.enable)
{
Expand Down
36 changes: 24 additions & 12 deletions nano/store/lmdb/lmdb_env.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

#include <boost/system/error_code.hpp>

nano::store::lmdb::env::env (bool & error_a, std::filesystem::path const & path_a, nano::store::lmdb::env::options options_a) :
nano::store::lmdb::env::env (bool & error_a, nano::logger & logger, std::filesystem::path const & path_a, nano::store::lmdb::env::options options_a) :
logger{ logger },
database_path{ path_a }
{
init (error_a, path_a, options_a);
Expand All @@ -22,20 +23,32 @@ void nano::store::lmdb::env::init (bool & error_a, std::filesystem::path const &
if (!error_mkdir)
{
MDB_env * environment;
auto status1 (mdb_env_create (&environment));
release_assert (status1 == 0);
auto status1 = mdb_env_create (&environment);
if (status1 != MDB_SUCCESS)
{
logger.critical (nano::log::type::lmdb, "Unable to create lmdb environment {}", status1);
release_assert (false);
}
this->environment.reset (environment);
auto status2 (mdb_env_set_maxdbs (environment, options_a.config.max_databases));
release_assert (status2 == 0);
auto status2 = mdb_env_set_maxdbs (environment, options_a.config.max_databases);
if (status2 != MDB_SUCCESS)
{
logger.critical (nano::log::type::lmdb, "Unable to set maximum dbs to: {} {}", options_a.config.max_databases, status2);
release_assert (false);
}
auto map_size = options_a.config.map_size;
auto max_instrumented_map_size = 16 * 1024 * 1024;
if (memory_intensive_instrumentation () && map_size > max_instrumented_map_size)
{
// In order to run LMDB with some types of memory instrumentation, the maximum map size must be smaller than what is normally used when non-instrumented
map_size = max_instrumented_map_size;
}
auto status3 (mdb_env_set_mapsize (environment, map_size));
release_assert (status3 == 0);
auto status3 = mdb_env_set_mapsize (environment, map_size);
if (status3 != MDB_SUCCESS)
{
logger.critical (nano::log::type::lmdb, "Unable to set enviroment map size to: {} {}", map_size, status3);
release_assert (false);
}
// It seems if there's ever more threads than mdb_env_set_maxreaders has read slots available, we get failures on transaction creation unless MDB_NOTLS is specified
// This can happen if something like 256 io_threads are specified in the node config
// MDB_NORDAHEAD will allow platforms that support it to load the DB in memory as needed.
Expand All @@ -58,13 +71,12 @@ void nano::store::lmdb::env::init (bool & error_a, std::filesystem::path const &
{
environment_flags |= MDB_NOMEMINIT;
}
auto status4 (mdb_env_open (environment, path_a.string ().c_str (), environment_flags, 00600));
if (status4 != 0)
auto status4 = mdb_env_open (environment, path_a.string ().c_str (), environment_flags, 00600);
if (status4 != MDB_SUCCESS)
{
std::string message = "Could not open lmdb environment(" + std::to_string (status4) + "): " + mdb_strerror (status4);
throw std::runtime_error (message);
logger.critical (nano::log::type::lmdb, "Could not open lmdb environment at: {} {}", path_a.string (), status4);
release_assert (false);
}
release_assert (status4 == 0);
error_a = status4 != 0;
}
else
Expand Down
4 changes: 3 additions & 1 deletion nano/store/lmdb/lmdb_env.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include <nano/lib/fwd.hpp>
#include <nano/lib/id_dispenser.hpp>
#include <nano/lib/lmdbconfig.hpp>
#include <nano/store/component.hpp>
Expand Down Expand Up @@ -55,13 +56,14 @@ class env final
nano::lmdb_config config;
};

env (bool &, std::filesystem::path const &, env::options options_a = env::options::make ());
env (bool &, nano::logger & logger, std::filesystem::path const &, env::options options_a = env::options::make ());
void init (bool &, std::filesystem::path const &, env::options options_a = env::options::make ());
~env ();
operator MDB_env * () const;
store::read_transaction tx_begin_read (txn_callbacks callbacks = txn_callbacks{}) const;
store::write_transaction tx_begin_write (txn_callbacks callbacks = txn_callbacks{}) const;
MDB_txn * tx (store::transaction const & transaction_a) const;
nano::logger & logger;
std::unique_ptr<MDB_env, decltype (&mdb_env_close)> environment{ nullptr, mdb_env_close };
nano::id_t const store_id{ nano::next_id () };
std::filesystem::path const database_path;
Expand Down
Loading
Loading