Merge pull request #8941
356e687
wallet_rpc_server: chunk refresh to keep responding to RPC while refreshing (moneromooo-monero)633e1b7
wallet_rpc_server: add --no-initial-sync flag for quicker network binding (moneromooo-monero)
This commit is contained in:
commit
031d318ca2
|
@ -3919,7 +3919,7 @@ std::shared_ptr<std::map<std::pair<uint64_t, uint64_t>, size_t>> wallet2::create
|
||||||
return cache;
|
return cache;
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
void wallet2::refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blocks_fetched, bool& received_money, bool check_pool, bool try_incremental)
|
void wallet2::refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blocks_fetched, bool& received_money, bool check_pool, uint64_t max_blocks, bool try_incremental)
|
||||||
{
|
{
|
||||||
if (m_offline)
|
if (m_offline)
|
||||||
{
|
{
|
||||||
|
@ -4014,7 +4014,7 @@ void wallet2::refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blo
|
||||||
// infer when we get an incoming output
|
// infer when we get an incoming output
|
||||||
|
|
||||||
bool first = true, last = false;
|
bool first = true, last = false;
|
||||||
while(m_run.load(std::memory_order_relaxed))
|
while(m_run.load(std::memory_order_relaxed) && blocks_fetched < max_blocks)
|
||||||
{
|
{
|
||||||
uint64_t next_blocks_start_height;
|
uint64_t next_blocks_start_height;
|
||||||
std::vector<cryptonote::block_complete_entry> next_blocks;
|
std::vector<cryptonote::block_complete_entry> next_blocks;
|
||||||
|
|
|
@ -1058,7 +1058,7 @@ private:
|
||||||
bool is_deprecated() const;
|
bool is_deprecated() const;
|
||||||
void refresh(bool trusted_daemon);
|
void refresh(bool trusted_daemon);
|
||||||
void refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blocks_fetched);
|
void refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blocks_fetched);
|
||||||
void refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blocks_fetched, bool& received_money, bool check_pool = true, bool try_incremental = true);
|
void refresh(bool trusted_daemon, uint64_t start_height, uint64_t & blocks_fetched, bool& received_money, bool check_pool = true, uint64_t max_blocks = std::numeric_limits<uint64_t>::max(), bool try_incremental = true);
|
||||||
bool refresh(bool trusted_daemon, uint64_t & blocks_fetched, bool& received_money, bool& ok);
|
bool refresh(bool trusted_daemon, uint64_t & blocks_fetched, bool& received_money, bool& ok);
|
||||||
|
|
||||||
void set_refresh_type(RefreshType refresh_type) { m_refresh_type = refresh_type; }
|
void set_refresh_type(RefreshType refresh_type) { m_refresh_type = refresh_type; }
|
||||||
|
|
|
@ -60,6 +60,7 @@ using namespace epee;
|
||||||
#define MONERO_DEFAULT_LOG_CATEGORY "wallet.rpc"
|
#define MONERO_DEFAULT_LOG_CATEGORY "wallet.rpc"
|
||||||
|
|
||||||
#define DEFAULT_AUTO_REFRESH_PERIOD 20 // seconds
|
#define DEFAULT_AUTO_REFRESH_PERIOD 20 // seconds
|
||||||
|
#define REFRESH_INFICATIVE_BLOCK_CHUNK_SIZE 256 // just to split refresh in separate calls to play nicer with other threads
|
||||||
|
|
||||||
#define CHECK_MULTISIG_ENABLED() \
|
#define CHECK_MULTISIG_ENABLED() \
|
||||||
do \
|
do \
|
||||||
|
@ -79,6 +80,7 @@ namespace
|
||||||
const command_line::arg_descriptor<bool> arg_restricted = {"restricted-rpc", "Restricts to view-only commands", false};
|
const command_line::arg_descriptor<bool> arg_restricted = {"restricted-rpc", "Restricts to view-only commands", false};
|
||||||
const command_line::arg_descriptor<std::string> arg_wallet_dir = {"wallet-dir", "Directory for newly created wallets"};
|
const command_line::arg_descriptor<std::string> arg_wallet_dir = {"wallet-dir", "Directory for newly created wallets"};
|
||||||
const command_line::arg_descriptor<bool> arg_prompt_for_password = {"prompt-for-password", "Prompts for password when not provided", false};
|
const command_line::arg_descriptor<bool> arg_prompt_for_password = {"prompt-for-password", "Prompts for password when not provided", false};
|
||||||
|
const command_line::arg_descriptor<bool> arg_no_initial_sync = {"no-initial-sync", "Skips the initial sync before listening for connections", false};
|
||||||
|
|
||||||
constexpr const char default_rpc_username[] = "monero";
|
constexpr const char default_rpc_username[] = "monero";
|
||||||
|
|
||||||
|
@ -152,10 +154,13 @@ namespace tools
|
||||||
uint64_t blocks_fetched = 0;
|
uint64_t blocks_fetched = 0;
|
||||||
try {
|
try {
|
||||||
bool received_money = false;
|
bool received_money = false;
|
||||||
if (m_wallet) m_wallet->refresh(m_wallet->is_trusted_daemon(), 0, blocks_fetched, received_money, true, true);
|
if (m_wallet) m_wallet->refresh(m_wallet->is_trusted_daemon(), 0, blocks_fetched, received_money, true, REFRESH_INFICATIVE_BLOCK_CHUNK_SIZE, true);
|
||||||
} catch (const std::exception& ex) {
|
} catch (const std::exception& ex) {
|
||||||
LOG_ERROR("Exception at while refreshing, what=" << ex.what());
|
LOG_ERROR("Exception at while refreshing, what=" << ex.what());
|
||||||
}
|
}
|
||||||
|
// if we got the max amount of blocks, do not set the last refresh time, we did only part of the refresh and will
|
||||||
|
// continue asap, and only set the last refresh time once the refresh is actually finished
|
||||||
|
if (blocks_fetched < REFRESH_INFICATIVE_BLOCK_CHUNK_SIZE)
|
||||||
m_last_auto_refresh_time = boost::posix_time::microsec_clock::universal_time();
|
m_last_auto_refresh_time = boost::posix_time::microsec_clock::universal_time();
|
||||||
return true;
|
return true;
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
@ -4554,6 +4559,7 @@ public:
|
||||||
const auto password_file = command_line::get_arg(vm, arg_password_file);
|
const auto password_file = command_line::get_arg(vm, arg_password_file);
|
||||||
const auto prompt_for_password = command_line::get_arg(vm, arg_prompt_for_password);
|
const auto prompt_for_password = command_line::get_arg(vm, arg_prompt_for_password);
|
||||||
const auto password_prompt = prompt_for_password ? password_prompter : nullptr;
|
const auto password_prompt = prompt_for_password ? password_prompter : nullptr;
|
||||||
|
const auto no_initial_sync = command_line::get_arg(vm, arg_no_initial_sync);
|
||||||
|
|
||||||
if(!wallet_file.empty() && !from_json.empty())
|
if(!wallet_file.empty() && !from_json.empty())
|
||||||
{
|
{
|
||||||
|
@ -4622,6 +4628,7 @@ public:
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (!no_initial_sync)
|
||||||
wal->refresh(wal->is_trusted_daemon());
|
wal->refresh(wal->is_trusted_daemon());
|
||||||
}
|
}
|
||||||
catch (const std::exception& e)
|
catch (const std::exception& e)
|
||||||
|
@ -4733,6 +4740,7 @@ int main(int argc, char** argv) {
|
||||||
command_line::add_arg(desc_params, arg_wallet_dir);
|
command_line::add_arg(desc_params, arg_wallet_dir);
|
||||||
command_line::add_arg(desc_params, arg_prompt_for_password);
|
command_line::add_arg(desc_params, arg_prompt_for_password);
|
||||||
command_line::add_arg(desc_params, arg_rpc_client_secret_key);
|
command_line::add_arg(desc_params, arg_rpc_client_secret_key);
|
||||||
|
command_line::add_arg(desc_params, arg_no_initial_sync);
|
||||||
|
|
||||||
daemonizer::init_options(hidden_options, desc_params);
|
daemonizer::init_options(hidden_options, desc_params);
|
||||||
desc_params.add(hidden_options);
|
desc_params.add(hidden_options);
|
||||||
|
|
Loading…
Reference in New Issue