CLI --debug_profile_bootstrap (#1502)
This commit is contained in:
parent
1f23dfd31b
commit
49a339babb
3 changed files with 60 additions and 4 deletions
|
|
@ -3622,11 +3622,12 @@ void rai::thread_runner::join ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rai::inactive_node::inactive_node (boost::filesystem::path const & path) :
|
rai::inactive_node::inactive_node (boost::filesystem::path const & path, uint16_t peering_port_a) :
|
||||||
path (path),
|
path (path),
|
||||||
io_context (std::make_shared<boost::asio::io_context> ()),
|
io_context (std::make_shared<boost::asio::io_context> ()),
|
||||||
alarm (*io_context),
|
alarm (*io_context),
|
||||||
work (1, nullptr)
|
work (1, nullptr),
|
||||||
|
peering_port (peering_port_a)
|
||||||
{
|
{
|
||||||
boost::system::error_code error_chmod;
|
boost::system::error_code error_chmod;
|
||||||
|
|
||||||
|
|
@ -3637,7 +3638,7 @@ work (1, nullptr)
|
||||||
rai::set_secure_perm_directory (path, error_chmod);
|
rai::set_secure_perm_directory (path, error_chmod);
|
||||||
logging.max_size = std::numeric_limits<std::uintmax_t>::max ();
|
logging.max_size = std::numeric_limits<std::uintmax_t>::max ();
|
||||||
logging.init (path);
|
logging.init (path);
|
||||||
node = std::make_shared<rai::node> (init, *io_context, 24000, path, alarm, logging, work);
|
node = std::make_shared<rai::node> (init, *io_context, peering_port, path, alarm, logging, work);
|
||||||
}
|
}
|
||||||
|
|
||||||
rai::inactive_node::~inactive_node ()
|
rai::inactive_node::~inactive_node ()
|
||||||
|
|
|
||||||
|
|
@ -539,7 +539,7 @@ public:
|
||||||
class inactive_node
|
class inactive_node
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inactive_node (boost::filesystem::path const & path = rai::working_path ());
|
inactive_node (boost::filesystem::path const & path = rai::working_path (), uint16_t = 24000);
|
||||||
~inactive_node ();
|
~inactive_node ();
|
||||||
boost::filesystem::path path;
|
boost::filesystem::path path;
|
||||||
std::shared_ptr<boost::asio::io_context> io_context;
|
std::shared_ptr<boost::asio::io_context> io_context;
|
||||||
|
|
@ -547,6 +547,7 @@ public:
|
||||||
rai::logging logging;
|
rai::logging logging;
|
||||||
rai::node_init init;
|
rai::node_init init;
|
||||||
rai::work_pool work;
|
rai::work_pool work;
|
||||||
|
uint16_t peering_port;
|
||||||
std::shared_ptr<rai::node> node;
|
std::shared_ptr<rai::node> node;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ int main (int argc, char * const * argv)
|
||||||
("debug_profile_kdf", "Profile kdf function")
|
("debug_profile_kdf", "Profile kdf function")
|
||||||
("debug_verify_profile", "Profile signature verification")
|
("debug_verify_profile", "Profile signature verification")
|
||||||
("debug_verify_profile_batch", "Profile batch signature verification")
|
("debug_verify_profile_batch", "Profile batch signature verification")
|
||||||
|
("debug_profile_bootstrap", "Profile bootstrap style blocks processing (at least 10GB of free storage space required)")
|
||||||
("debug_profile_sign", "Profile signature generation")
|
("debug_profile_sign", "Profile signature generation")
|
||||||
("debug_profile_process", "Profile active blocks processing (only for rai_test_network)")
|
("debug_profile_process", "Profile active blocks processing (only for rai_test_network)")
|
||||||
("debug_profile_votes", "Profile votes processing (only for rai_test_network)")
|
("debug_profile_votes", "Profile votes processing (only for rai_test_network)")
|
||||||
|
|
@ -639,6 +640,59 @@ int main (int argc, char * const * argv)
|
||||||
}
|
}
|
||||||
std::cout << boost::str (boost::format ("%1% pending blocks validated\n") % count);
|
std::cout << boost::str (boost::format ("%1% pending blocks validated\n") % count);
|
||||||
}
|
}
|
||||||
|
else if (vm.count ("debug_profile_bootstrap"))
|
||||||
|
{
|
||||||
|
rai::inactive_node node2 (rai::unique_path (), 24001);
|
||||||
|
rai::genesis genesis;
|
||||||
|
auto begin (std::chrono::high_resolution_clock::now ());
|
||||||
|
uint64_t block_count (0);
|
||||||
|
size_t count (0);
|
||||||
|
{
|
||||||
|
rai::inactive_node node (data_path, 24000);
|
||||||
|
auto transaction (node.node->store.tx_begin ());
|
||||||
|
block_count = node.node->store.block_count (transaction).sum ();
|
||||||
|
std::cout << boost::str (boost::format ("Performing bootstrap emulation, %1% blocks in ledger...") % block_count) << std::endl;
|
||||||
|
for (auto i (node.node->store.latest_begin (transaction)), n (node.node->store.latest_end ()); i != n; ++i)
|
||||||
|
{
|
||||||
|
rai::account_info info (i->second);
|
||||||
|
auto hash (info.head);
|
||||||
|
while (!hash.is_zero ())
|
||||||
|
{
|
||||||
|
// Retrieving block data
|
||||||
|
auto block (node.node->store.block_get (transaction, hash));
|
||||||
|
if (block != nullptr)
|
||||||
|
{
|
||||||
|
++count;
|
||||||
|
if ((count % 100000) == 0)
|
||||||
|
{
|
||||||
|
std::cout << boost::str (boost::format ("%1% blocks retrieved") % count) << std::endl;
|
||||||
|
}
|
||||||
|
node2.node->block_processor.add (block, std::chrono::steady_clock::time_point ());
|
||||||
|
// Retrieving previous block hash
|
||||||
|
hash = block->previous ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
count = 0;
|
||||||
|
uint64_t block_count_2 (0);
|
||||||
|
while (block_count_2 != block_count)
|
||||||
|
{
|
||||||
|
std::this_thread::sleep_for (std::chrono::seconds (1));
|
||||||
|
auto transaction_2 (node2.node->store.tx_begin ());
|
||||||
|
block_count_2 = node2.node->store.block_count (transaction_2).sum ();
|
||||||
|
if ((count % 60) == 0)
|
||||||
|
{
|
||||||
|
std::cout << boost::str (boost::format ("%1% (%2%) blocks processed") % block_count_2 % node2.node->store.unchecked_count (transaction_2)) << std::endl;
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
auto end (std::chrono::high_resolution_clock::now ());
|
||||||
|
auto time (std::chrono::duration_cast<std::chrono::microseconds> (end - begin).count ());
|
||||||
|
auto seconds (time / 1000000);
|
||||||
|
rai::remove_temporary_directories ();
|
||||||
|
std::cout << boost::str (boost::format ("%|1$ 12d| seconds \n%2% blocks per second") % seconds % (block_count / seconds)) << std::endl;
|
||||||
|
}
|
||||||
else if (vm.count ("version"))
|
else if (vm.count ("version"))
|
||||||
{
|
{
|
||||||
std::cout << "Version " << RAIBLOCKS_VERSION_MAJOR << "." << RAIBLOCKS_VERSION_MINOR << std::endl;
|
std::cout << "Version " << RAIBLOCKS_VERSION_MAJOR << "." << RAIBLOCKS_VERSION_MINOR << std::endl;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue