Skip to content

Commit

Permalink
Update CLI commands missing checks for reading config and overrides (n…
Browse files Browse the repository at this point in the history
…anocurrency#3050)

* Update missing CLI commands to check config and flags

* Serg comment
  • Loading branch information
wezrule authored and deusmax committed Mar 16, 2021
1 parent a3e1ad1 commit 79c92db
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 53 deletions.
79 changes: 38 additions & 41 deletions nano/nano_node/entry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -894,14 +894,11 @@ int main (int argc, char * const * argv)
size_t num_iterations (5); // 100,000 * 5 * 2 = 1,000,000 blocks
size_t max_blocks (2 * num_accounts * num_iterations + num_accounts * 2); // 1,000,000 + 2 * 100,000 = 1,200,000 blocks
std::cout << boost::str (boost::format ("Starting pregenerating %1% blocks\n") % max_blocks);
boost::asio::io_context io_ctx;
nano::work_pool work (std::numeric_limits<unsigned>::max ());
nano::logging logging;
auto path (nano::unique_path ());
logging.init (path);
nano::node_flags node_flags;
nano::update_flags (node_flags, vm);
auto node (std::make_shared<nano::node> (io_ctx, 24001, path, logging, work, node_flags));
nano::inactive_node inactive_node (nano::unique_path (), data_path, node_flags);
auto node = inactive_node.node;

nano::block_hash genesis_latest (node->latest (dev_params.ledger.dev_genesis_key.pub));
nano::uint128_t genesis_balance (std::numeric_limits<nano::uint128_t>::max ());
// Generating keys
Expand All @@ -921,7 +918,7 @@ int main (int argc, char * const * argv)
.balance (genesis_balance)
.link (keys[i].pub)
.sign (dev_params.ledger.dev_genesis_key.prv, dev_params.ledger.dev_genesis_key.pub)
.work (*work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1))
.work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1))
.build ();

genesis_latest = send->hash ();
Expand All @@ -934,7 +931,7 @@ int main (int argc, char * const * argv)
.balance (balances[i])
.link (genesis_latest)
.sign (keys[i].prv, keys[i].pub)
.work (*work.generate (nano::work_version::work_1, keys[i].pub, node->network_params.network.publish_thresholds.epoch_1))
.work (*node->work.generate (nano::work_version::work_1, keys[i].pub, node->network_params.network.publish_thresholds.epoch_1))
.build ();

frontiers[i] = open->hash ();
Expand All @@ -955,7 +952,7 @@ int main (int argc, char * const * argv)
.balance (balances[j])
.link (keys[other].pub)
.sign (keys[j].prv, keys[j].pub)
.work (*work.generate (nano::work_version::work_1, frontiers[j], node->network_params.network.publish_thresholds.epoch_1))
.work (*node->work.generate (nano::work_version::work_1, frontiers[j], node->network_params.network.publish_thresholds.epoch_1))
.build ();

frontiers[j] = send->hash ();
Expand All @@ -970,7 +967,7 @@ int main (int argc, char * const * argv)
.balance (balances[other])
.link (frontiers[j].as_block_hash ())
.sign (keys[other].prv, keys[other].pub)
.work (*work.generate (nano::work_version::work_1, frontiers[other], node->network_params.network.publish_thresholds.epoch_1))
.work (*node->work.generate (nano::work_version::work_1, frontiers[other], node->network_params.network.publish_thresholds.epoch_1))
.build ();

frontiers[other] = receive->hash ();
Expand Down Expand Up @@ -1014,12 +1011,11 @@ int main (int argc, char * const * argv)
size_t num_representatives (25);
size_t max_votes (num_elections * num_representatives); // 40,000 * 25 = 1,000,000 votes
std::cerr << boost::str (boost::format ("Starting pregenerating %1% votes\n") % max_votes);
boost::asio::io_context io_ctx;
nano::work_pool work (std::numeric_limits<unsigned>::max ());
nano::logging logging;
auto path (nano::unique_path ());
logging.init (path);
auto node (std::make_shared<nano::node> (io_ctx, 24001, path, logging, work));
nano::node_flags node_flags;
nano::update_flags (node_flags, vm);
nano::node_wrapper node_wrapper (nano::unique_path (), data_path, node_flags);
auto node = node_wrapper.node;

nano::block_hash genesis_latest (node->latest (dev_params.ledger.dev_genesis_key.pub));
nano::uint128_t genesis_balance (std::numeric_limits<nano::uint128_t>::max ());
// Generating keys
Expand All @@ -1037,7 +1033,7 @@ int main (int argc, char * const * argv)
.balance (genesis_balance)
.link (keys[i].pub)
.sign (dev_params.ledger.dev_genesis_key.prv, dev_params.ledger.dev_genesis_key.pub)
.work (*work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1))
.work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1))
.build ();

genesis_latest = send->hash ();
Expand All @@ -1050,7 +1046,7 @@ int main (int argc, char * const * argv)
.balance (balance)
.link (genesis_latest)
.sign (keys[i].prv, keys[i].pub)
.work (*work.generate (nano::work_version::work_1, keys[i].pub, node->network_params.network.publish_thresholds.epoch_1))
.work (*node->work.generate (nano::work_version::work_1, keys[i].pub, node->network_params.network.publish_thresholds.epoch_1))
.build ();

node->ledger.process (transaction, *open);
Expand All @@ -1069,7 +1065,7 @@ int main (int argc, char * const * argv)
.balance (genesis_balance)
.link (destination.pub)
.sign (dev_params.ledger.dev_genesis_key.prv, dev_params.ledger.dev_genesis_key.pub)
.work (*work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1))
.work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1))
.build ();

genesis_latest = send->hash ();
Expand Down Expand Up @@ -1141,8 +1137,20 @@ int main (int argc, char * const * argv)
auto path1 (nano::unique_path ());
auto path2 (nano::unique_path ());
logging.init (path1);
nano::node_config config1 (24000, logging);
std::vector<std::string> config_overrides;
auto config (vm.find ("config"));
if (config != vm.end ())
{
config_overrides = nano::config_overrides (config->second.as<std::vector<nano::config_key_value_pair>> ());
}
nano::daemon_config daemon_config (data_path);
auto error = nano::read_node_config_toml (data_path, daemon_config, config_overrides);

nano::node_config config1 = daemon_config.node;
config1.peering_port = 24000;

nano::node_flags flags;
nano::update_flags (flags, vm);
flags.disable_lazy_bootstrap = true;
flags.disable_legacy_bootstrap = true;
flags.disable_wallet_bootstrap = true;
Expand Down Expand Up @@ -1219,31 +1227,20 @@ int main (int argc, char * const * argv)
}

// Start new node
nano::node_config config2 (24001, logging);
// Config override
std::vector<std::string> config_overrides;
auto config (vm.find ("config"));
if (config != vm.end ())
nano::node_config config2 = daemon_config.node;
config1.peering_port = 24001;
if (error)
{
config_overrides = config->second.as<std::vector<std::string>> ();
std::cerr << "\n"
<< error.get_message () << std::endl;
std::exit (1);
}
if (!config_overrides.empty ())
else
{
auto path (nano::unique_path ());
nano::daemon_config daemon_config (path);
auto error = nano::read_node_config_toml (path, daemon_config, config_overrides);
if (error)
{
std::cerr << "\n"
<< error.get_message () << std::endl;
std::exit (1);
}
else
{
config2.frontiers_confirmation = daemon_config.node.frontiers_confirmation;
config2.active_elections_size = daemon_config.node.active_elections_size;
}
config2.frontiers_confirmation = daemon_config.node.frontiers_confirmation;
config2.active_elections_size = daemon_config.node.active_elections_size;
}

auto node2 (std::make_shared<nano::node> (io_ctx2, path2, config2, work, flags, 1));
node2->start ();
nano::thread_runner runner2 (io_ctx2, node2->config.io_threads);
Expand Down
20 changes: 15 additions & 5 deletions nano/node/cli.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
namespace
{
void reset_confirmation_heights (nano::block_store & store);
bool is_using_rocksdb (boost::filesystem::path const & data_path, std::error_code & ec);
bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec);
}

std::string nano::error_cli_messages::message (int ev) const
Expand Down Expand Up @@ -337,7 +337,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map
{
try
{
auto using_rocksdb = is_using_rocksdb (data_path, ec);
auto using_rocksdb = is_using_rocksdb (data_path, vm, ec);
if (!ec)
{
std::cout << "Vacuuming database copy in ";
Expand Down Expand Up @@ -408,7 +408,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map
{
try
{
auto using_rocksdb = is_using_rocksdb (data_path, ec);
auto using_rocksdb = is_using_rocksdb (data_path, vm, ec);
if (!ec)
{
boost::filesystem::path source_path;
Expand Down Expand Up @@ -1268,10 +1268,20 @@ void reset_confirmation_heights (nano::block_store & store)
store.confirmation_height_put (transaction, network_params.ledger.genesis_account, { 1, network_params.ledger.genesis_hash });
}

bool is_using_rocksdb (boost::filesystem::path const & data_path, std::error_code & ec)
bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec)
{
nano::daemon_config config (data_path);
auto error = nano::read_node_config_toml (data_path, config);

// Config overriding
auto config_arg (vm.find ("config"));
std::vector<std::string> config_overrides;
if (config_arg != vm.end ())
{
config_overrides = nano::config_overrides (config_arg->second.as<std::vector<nano::config_key_value_pair>> ());
}

// config override...
auto error = nano::read_node_config_toml (data_path, config, config_overrides);
if (!error)
{
return config.node.rocksdb_config.enable;
Expand Down
19 changes: 15 additions & 4 deletions nano/node/node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1734,7 +1734,7 @@ std::pair<uint64_t, decltype (nano::ledger::bootstrap_weights)> nano::node::get_
return { max_blocks, weights };
}

nano::inactive_node::inactive_node (boost::filesystem::path const & path_a, nano::node_flags const & node_flags_a) :
nano::node_wrapper::node_wrapper (boost::filesystem::path const & path_a, boost::filesystem::path const & config_path_a, nano::node_flags const & node_flags_a) :
io_context (std::make_shared<boost::asio::io_context> ()),
work (1)
{
Expand All @@ -1746,7 +1746,7 @@ work (1)
boost::filesystem::create_directories (path_a);
nano::set_secure_perm_directory (path_a, error_chmod);
nano::daemon_config daemon_config (path_a);
auto error = nano::read_node_config_toml (path_a, daemon_config, node_flags_a.config_overrides);
auto error = nano::read_node_config_toml (config_path_a, daemon_config, node_flags_a.config_overrides);
if (error)
{
std::cerr << "Error deserializing config file";
Expand All @@ -1765,14 +1765,25 @@ work (1)
node_config.logging.init (path_a);

node = std::make_shared<nano::node> (*io_context, path_a, node_config, work, node_flags_a);
node->active.stop ();
}

nano::inactive_node::~inactive_node ()
nano::node_wrapper::~node_wrapper ()
{
node->stop ();
}

nano::inactive_node::inactive_node (boost::filesystem::path const & path_a, boost::filesystem::path const & config_path_a, nano::node_flags const & node_flags_a) :
node_wrapper (path_a, config_path_a, node_flags_a),
node (node_wrapper.node)
{
node_wrapper.node->active.stop ();
}

nano::inactive_node::inactive_node (boost::filesystem::path const & path_a, nano::node_flags const & node_flags_a) :
inactive_node (path_a, path_a, node_flags_a)
{
}

nano::node_flags const & nano::inactive_node_flag_defaults ()
{
static nano::node_flags node_flags;
Expand Down
17 changes: 14 additions & 3 deletions nano/node/node.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -215,14 +215,25 @@ std::unique_ptr<container_info_component> collect_container_info (node & node, s

nano::node_flags const & inactive_node_flag_defaults ();

class inactive_node final
class node_wrapper final
{
public:
inactive_node (boost::filesystem::path const & path_a, nano::node_flags const & node_flags_a);
~inactive_node ();
node_wrapper (boost::filesystem::path const & path_a, boost::filesystem::path const & config_path_a, nano::node_flags const & node_flags_a);
~node_wrapper ();

std::shared_ptr<boost::asio::io_context> io_context;
nano::work_pool work;
std::shared_ptr<nano::node> node;
};

class inactive_node final
{
public:
inactive_node (boost::filesystem::path const & path_a, nano::node_flags const & node_flags_a);
inactive_node (boost::filesystem::path const & path_a, boost::filesystem::path const & config_path_a, nano::node_flags const & node_flags_a);

nano::node_wrapper node_wrapper;
std::shared_ptr<nano::node> node;
};
std::unique_ptr<nano::inactive_node> default_inactive_node (boost::filesystem::path const &, boost::program_options::variables_map const &);
}

0 comments on commit 79c92db

Please sign in to comment.