blockchain_converter: Add support for resume from last block
Add option "--resume <on|off>" where default is on.
This commit is contained in:
parent
488080326c
commit
dbdcf11778
@ -44,14 +44,19 @@
|
|||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
// CONFIG
|
// CONFIG
|
||||||
static bool opt_batch = true;
|
bool opt_batch = true;
|
||||||
static bool opt_testnet = false;
|
bool opt_resume = true;
|
||||||
|
bool opt_testnet = false;
|
||||||
|
|
||||||
// number of blocks per batch transaction
|
// number of blocks per batch transaction
|
||||||
// adjustable through command-line argument according to available RAM
|
// adjustable through command-line argument according to available RAM
|
||||||
static uint64_t db_batch_size = 20000;
|
uint64_t db_batch_size = 20000;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
namespace po = boost::program_options;
|
namespace po = boost::program_options;
|
||||||
|
|
||||||
@ -113,11 +118,14 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
const command_line::arg_descriptor<bool> arg_batch = {"batch",
|
const command_line::arg_descriptor<bool> arg_batch = {"batch",
|
||||||
"Batch transactions for faster import", true};
|
"Batch transactions for faster import", true};
|
||||||
|
const command_line::arg_descriptor<bool> arg_resume = {"resume",
|
||||||
|
"Resume from current height if output database already exists", true};
|
||||||
|
|
||||||
// call add_options() directly for these arguments since command_line helpers
|
// call add_options() directly for these arguments since command_line helpers
|
||||||
// support only boolean switch, not boolean argument
|
// support only boolean switch, not boolean argument
|
||||||
desc_cmd_sett.add_options()
|
desc_cmd_sett.add_options()
|
||||||
(arg_batch.name, make_semantic(arg_batch), arg_batch.description)
|
(arg_batch.name, make_semantic(arg_batch), arg_batch.description)
|
||||||
|
(arg_resume.name, make_semantic(arg_resume), arg_resume.description)
|
||||||
;
|
;
|
||||||
|
|
||||||
po::options_description desc_options("Allowed options");
|
po::options_description desc_options("Allowed options");
|
||||||
@ -137,6 +145,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
int log_level = command_line::get_arg(vm, arg_log_level);
|
int log_level = command_line::get_arg(vm, arg_log_level);
|
||||||
opt_batch = command_line::get_arg(vm, arg_batch);
|
opt_batch = command_line::get_arg(vm, arg_batch);
|
||||||
|
opt_resume = command_line::get_arg(vm, arg_resume);
|
||||||
db_batch_size = command_line::get_arg(vm, arg_batch_size);
|
db_batch_size = command_line::get_arg(vm, arg_batch_size);
|
||||||
|
|
||||||
if (command_line::get_arg(vm, command_line::arg_help))
|
if (command_line::get_arg(vm, command_line::arg_help))
|
||||||
@ -178,23 +187,41 @@ int main(int argc, char* argv[])
|
|||||||
{
|
{
|
||||||
LOG_PRINT_L0("batch: " << std::boolalpha << opt_batch << std::noboolalpha);
|
LOG_PRINT_L0("batch: " << std::boolalpha << opt_batch << std::noboolalpha);
|
||||||
}
|
}
|
||||||
|
LOG_PRINT_L0("resume: " << std::boolalpha << opt_resume << std::noboolalpha);
|
||||||
LOG_PRINT_L0("testnet: " << std::boolalpha << opt_testnet << std::noboolalpha);
|
LOG_PRINT_L0("testnet: " << std::boolalpha << opt_testnet << std::noboolalpha);
|
||||||
|
|
||||||
fake_core c(src_folder, opt_testnet);
|
fake_core c(src_folder, opt_testnet);
|
||||||
|
|
||||||
height = c.m_storage.get_current_blockchain_height();
|
height = c.m_storage.get_current_blockchain_height();
|
||||||
if (! num_blocks || num_blocks > height)
|
|
||||||
end_block = height - 1;
|
|
||||||
else
|
|
||||||
end_block = start_block + num_blocks - 1;
|
|
||||||
|
|
||||||
BlockchainDB *blockchain;
|
BlockchainDB *blockchain;
|
||||||
blockchain = new BlockchainLMDB(opt_batch);
|
blockchain = new BlockchainLMDB(opt_batch);
|
||||||
dest_folder /= blockchain->get_db_name();
|
dest_folder /= blockchain->get_db_name();
|
||||||
LOG_PRINT_L0("Source blockchain: " << src_folder);
|
LOG_PRINT_L0("Source blockchain: " << src_folder);
|
||||||
LOG_PRINT_L0("Dest blockchain: " << dest_folder.string());
|
LOG_PRINT_L0("Dest blockchain: " << dest_folder.string());
|
||||||
LOG_PRINT_L0("Opening LMDB: " << dest_folder.string());
|
LOG_PRINT_L0("Opening dest blockchain (BlockchainDB " << blockchain->get_db_name() << ")");
|
||||||
blockchain->open(dest_folder.string());
|
blockchain->open(dest_folder.string());
|
||||||
|
LOG_PRINT_L0("Source blockchain height: " << height);
|
||||||
|
LOG_PRINT_L0("Dest blockchain height: " << blockchain->height());
|
||||||
|
|
||||||
|
if (opt_resume)
|
||||||
|
// next block number to add is same as current height
|
||||||
|
start_block = blockchain->height();
|
||||||
|
|
||||||
|
if (! num_blocks || (start_block + num_blocks > height))
|
||||||
|
end_block = height - 1;
|
||||||
|
else
|
||||||
|
end_block = start_block + num_blocks - 1;
|
||||||
|
|
||||||
|
LOG_PRINT_L0("start height: " << start_block+1 << " stop height: " <<
|
||||||
|
end_block+1);
|
||||||
|
|
||||||
|
if (start_block > end_block)
|
||||||
|
{
|
||||||
|
LOG_PRINT_L0("Finished: no blocks to add");
|
||||||
|
delete blockchain;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (opt_batch)
|
if (opt_batch)
|
||||||
blockchain->batch_start();
|
blockchain->batch_start();
|
||||||
@ -247,7 +274,7 @@ int main(int argc, char* argv[])
|
|||||||
catch (const std::exception& e)
|
catch (const std::exception& e)
|
||||||
{
|
{
|
||||||
std::cout << ENDL;
|
std::cout << ENDL;
|
||||||
std::cerr << "Error adding block to new blockchain: " << e.what() << ENDL;
|
std::cerr << "Error adding block " << i << " to new blockchain: " << e.what() << ENDL;
|
||||||
delete blockchain;
|
delete blockchain;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user