Throw from lmdb::env
This commit is contained in:
parent
c998ee4e5d
commit
ac9edf359b
5 changed files with 31 additions and 68 deletions
|
@ -18,8 +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");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -39,8 +38,7 @@ TEST (wallet, no_special_keys_accounts)
|
|||
TEST (wallet, no_key)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -54,8 +52,7 @@ TEST (wallet, no_key)
|
|||
TEST (wallet, fetch_locked)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -76,8 +73,7 @@ TEST (wallet, fetch_locked)
|
|||
TEST (wallet, retrieval)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -98,8 +94,7 @@ TEST (wallet, retrieval)
|
|||
TEST (wallet, empty_iteration)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -112,8 +107,7 @@ TEST (wallet, empty_iteration)
|
|||
TEST (wallet, one_item_iteration)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -134,8 +128,7 @@ TEST (wallet, one_item_iteration)
|
|||
TEST (wallet, two_item_iteration)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
nano::keypair key1;
|
||||
nano::keypair key2;
|
||||
ASSERT_NE (key1.pub, key2.pub);
|
||||
|
@ -260,8 +253,7 @@ TEST (wallet, spend_no_previous)
|
|||
TEST (wallet, find_none)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -273,8 +265,7 @@ TEST (wallet, find_none)
|
|||
TEST (wallet, find_existing)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -292,8 +283,7 @@ TEST (wallet, find_existing)
|
|||
TEST (wallet, rekey)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -322,8 +312,7 @@ TEST (wallet, rekey)
|
|||
TEST (wallet, hash_password)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -371,9 +360,8 @@ 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 (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
ASSERT_FALSE (init);
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
{
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -407,8 +395,7 @@ TEST (wallet, reopen_default_password)
|
|||
TEST (wallet, representative)
|
||||
{
|
||||
auto error (false);
|
||||
nano::store::lmdb::env env (error, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (error);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (error, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -428,8 +415,7 @@ TEST (wallet, representative)
|
|||
TEST (wallet, serialize_json_empty)
|
||||
{
|
||||
auto error (false);
|
||||
nano::store::lmdb::env env (error, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (error);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet1 (error, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -453,8 +439,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");
|
||||
ASSERT_FALSE (error);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet1 (error, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -482,8 +467,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");
|
||||
ASSERT_FALSE (error);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet1 (error, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -515,8 +499,7 @@ TEST (wallet, serialize_json_password)
|
|||
TEST (wallet_store, move)
|
||||
{
|
||||
auto error (false);
|
||||
nano::store::lmdb::env env (error, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (error);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet1 (error, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -672,8 +655,7 @@ TEST (wallet, insert_locked)
|
|||
TEST (wallet, deterministic_keys)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
@ -715,8 +697,7 @@ TEST (wallet, deterministic_keys)
|
|||
TEST (wallet, reseed)
|
||||
{
|
||||
bool init;
|
||||
nano::store::lmdb::env env (init, nano::unique_path () / "wallet.ldb");
|
||||
ASSERT_FALSE (init);
|
||||
nano::store::lmdb::env env (nano::unique_path () / "wallet.ldb");
|
||||
auto transaction (env.tx_begin_write ());
|
||||
nano::kdf kdf{ nano::dev::network_params.kdf_work };
|
||||
nano::wallet_store wallet (init, kdf, transaction, env, nano::dev::genesis_key.pub, 1, "0");
|
||||
|
|
|
@ -1920,12 +1920,8 @@ auto nano::wallet_store::end (store::transaction const & transaction_a) -> itera
|
|||
}
|
||||
|
||||
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))
|
||||
environment (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))
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
throw std::runtime_error ("Failed to initialize wallet store: " + path_a.string ());
|
||||
}
|
||||
}
|
||||
|
||||
nano::container_info nano::wallets::container_info () const
|
||||
|
|
|
@ -47,15 +47,10 @@ nano::store::lmdb::component::component (nano::logger & logger_a, std::filesyste
|
|||
database_path{ path_a },
|
||||
mode{ mode_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).set_read_only (mode_a == nano::store::open_mode::read_only)),
|
||||
env (path_a, nano::store::lmdb::env::options::make ().set_config (lmdb_config_a).set_use_no_mem_init (true).set_read_only (mode_a == nano::store::open_mode::read_only)),
|
||||
mdb_txn_tracker (logger_a, txn_tracking_config_a, block_processor_batch_max_time_a),
|
||||
txn_tracking_enabled (txn_tracking_config_a.enable)
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
throw std::runtime_error ("Failed to initialize LMDB store: " + database_path.string ());
|
||||
}
|
||||
|
||||
logger.info (nano::log::type::lmdb, "Initializing ledger store: {}", database_path.string ());
|
||||
|
||||
debug_assert (path_a.filename () == "data.ldb");
|
||||
|
@ -125,7 +120,6 @@ nano::store::lmdb::component::component (nano::logger & logger_a, std::filesyste
|
|||
open_databases (transaction, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool nano::store::lmdb::component::vacuum_after_upgrade (std::filesystem::path const & path_a, nano::lmdb_config const & lmdb_config_a)
|
||||
{
|
||||
|
@ -147,16 +141,9 @@ bool nano::store::lmdb::component::vacuum_after_upgrade (std::filesystem::path c
|
|||
auto options = nano::store::lmdb::env::options::make ()
|
||||
.set_config (lmdb_config_a)
|
||||
.set_use_no_mem_init (true);
|
||||
env.init (error, path_a, options);
|
||||
if (!error)
|
||||
{
|
||||
auto transaction (tx_begin_read ());
|
||||
open_databases (transaction, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::runtime_error ("Failed to reinitialize LMDB store after vacuum: " + path_a.string ());
|
||||
}
|
||||
env.init (path_a, options);
|
||||
auto transaction (tx_begin_read ());
|
||||
open_databases (transaction, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
#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 (std::filesystem::path const & path_a, nano::store::lmdb::env::options options_a) :
|
||||
database_path{ path_a }
|
||||
{
|
||||
init (error_a, path_a, options_a);
|
||||
init (path_a, options_a);
|
||||
}
|
||||
|
||||
void nano::store::lmdb::env::init (bool & error_a, std::filesystem::path const & path_a, nano::store::lmdb::env::options options_a)
|
||||
void nano::store::lmdb::env::init (std::filesystem::path const & path_a, nano::store::lmdb::env::options options_a)
|
||||
{
|
||||
debug_assert (path_a.extension () == ".ldb", "invalid filename extension for lmdb database file");
|
||||
|
||||
|
@ -74,16 +74,15 @@ void nano::store::lmdb::env::init (bool & error_a, std::filesystem::path const &
|
|||
throw std::runtime_error (message);
|
||||
}
|
||||
release_assert (success (status4), error_string (status4));
|
||||
error_a = !success (status4);
|
||||
}
|
||||
else
|
||||
{
|
||||
error_a = true;
|
||||
throw std::runtime_error ("Could not create database directory: " + error_mkdir.message ());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
error_a = true;
|
||||
throw std::runtime_error ("Invalid database path: path must have parent directory");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -62,8 +62,8 @@ public:
|
|||
nano::lmdb_config config;
|
||||
};
|
||||
|
||||
env (bool &, 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 (std::filesystem::path const &, env::options options_a = env::options::make ());
|
||||
void init (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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue