mirror of
https://github.com/monero-project/monero.git
synced 2024-11-17 16:27:39 +00:00
rpc: skip non-synced bootstrap daemons in --no-sync mode too
This commit is contained in:
parent
83f1d863bd
commit
aaf837cf5f
3 changed files with 21 additions and 17 deletions
|
@ -45,12 +45,12 @@ namespace cryptonote
|
||||||
return host + ":" + m_http_client.get_port();
|
return host + ":" + m_http_client.get_port();
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::optional<uint64_t> bootstrap_daemon::get_height()
|
boost::optional<std::pair<uint64_t, uint64_t>> bootstrap_daemon::get_height()
|
||||||
{
|
{
|
||||||
cryptonote::COMMAND_RPC_GET_HEIGHT::request req;
|
cryptonote::COMMAND_RPC_GET_INFO::request req;
|
||||||
cryptonote::COMMAND_RPC_GET_HEIGHT::response res;
|
cryptonote::COMMAND_RPC_GET_INFO::response res;
|
||||||
|
|
||||||
if (!invoke_http_json("/getheight", req, res))
|
if (!invoke_http_json("/getinfo", req, res))
|
||||||
{
|
{
|
||||||
return boost::none;
|
return boost::none;
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ namespace cryptonote
|
||||||
return boost::none;
|
return boost::none;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.height;
|
return {{res.height, res.target_height}};
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bootstrap_daemon::handle_result(bool success, const std::string &status)
|
bool bootstrap_daemon::handle_result(bool success, const std::string &status)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include <boost/optional/optional.hpp>
|
#include <boost/optional/optional.hpp>
|
||||||
#include <boost/thread/mutex.hpp>
|
#include <boost/thread/mutex.hpp>
|
||||||
|
@ -27,7 +28,7 @@ namespace cryptonote
|
||||||
bool rpc_payment_enabled);
|
bool rpc_payment_enabled);
|
||||||
|
|
||||||
std::string address() const noexcept;
|
std::string address() const noexcept;
|
||||||
boost::optional<uint64_t> get_height();
|
boost::optional<std::pair<uint64_t, uint64_t>> get_height();
|
||||||
bool handle_result(bool success, const std::string &status);
|
bool handle_result(bool success, const std::string &status);
|
||||||
|
|
||||||
template <class t_request, class t_response>
|
template <class t_request, class t_response>
|
||||||
|
|
|
@ -1975,34 +1975,37 @@ namespace cryptonote
|
||||||
}
|
}
|
||||||
|
|
||||||
auto current_time = std::chrono::system_clock::now();
|
auto current_time = std::chrono::system_clock::now();
|
||||||
if (!m_p2p.get_payload_object().no_sync() &&
|
if (current_time - m_bootstrap_height_check_time > std::chrono::seconds(30)) // update every 30s
|
||||||
current_time - m_bootstrap_height_check_time > std::chrono::seconds(30)) // update every 30s
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
boost::upgrade_to_unique_lock<boost::shared_mutex> lock(upgrade_lock);
|
boost::upgrade_to_unique_lock<boost::shared_mutex> lock(upgrade_lock);
|
||||||
m_bootstrap_height_check_time = current_time;
|
m_bootstrap_height_check_time = current_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::optional<uint64_t> bootstrap_daemon_height = m_bootstrap_daemon->get_height();
|
boost::optional<std::pair<uint64_t, uint64_t>> bootstrap_daemon_height_info = m_bootstrap_daemon->get_height();
|
||||||
if (!bootstrap_daemon_height)
|
if (!bootstrap_daemon_height_info)
|
||||||
{
|
{
|
||||||
MERROR("Failed to fetch bootstrap daemon height");
|
MERROR("Failed to fetch bootstrap daemon height");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t target_height = m_core.get_target_blockchain_height();
|
const uint64_t bootstrap_daemon_height = bootstrap_daemon_height_info->first;
|
||||||
if (*bootstrap_daemon_height < target_height)
|
const uint64_t bootstrap_daemon_target_height = bootstrap_daemon_height_info->second;
|
||||||
|
if (bootstrap_daemon_height < bootstrap_daemon_target_height)
|
||||||
{
|
{
|
||||||
MINFO("Bootstrap daemon is out of sync");
|
MINFO("Bootstrap daemon is out of sync");
|
||||||
return m_bootstrap_daemon->handle_result(false, {});
|
return m_bootstrap_daemon->handle_result(false, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t top_height = m_core.get_current_blockchain_height();
|
if (!m_p2p.get_payload_object().no_sync())
|
||||||
m_should_use_bootstrap_daemon = top_height + 10 < *bootstrap_daemon_height;
|
{
|
||||||
MINFO((m_should_use_bootstrap_daemon ? "Using" : "Not using") << " the bootstrap daemon (our height: " << top_height << ", bootstrap daemon's height: " << *bootstrap_daemon_height << ")");
|
uint64_t top_height = m_core.get_current_blockchain_height();
|
||||||
|
m_should_use_bootstrap_daemon = top_height + 10 < bootstrap_daemon_height;
|
||||||
|
MINFO((m_should_use_bootstrap_daemon ? "Using" : "Not using") << " the bootstrap daemon (our height: " << top_height << ", bootstrap daemon's height: " << bootstrap_daemon_height << ")");
|
||||||
|
|
||||||
if (!m_should_use_bootstrap_daemon)
|
if (!m_should_use_bootstrap_daemon)
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode == invoke_http_mode::JON)
|
if (mode == invoke_http_mode::JON)
|
||||||
|
|
Loading…
Reference in a new issue