mirror of
https://github.com/monero-project/monero.git
synced 2024-11-18 10:01:02 +00:00
p2p: fix fallback seed node usage
Those were added to the seed nodes list even when they had already been added. Moreover, the current index was not reset after they were added, typically causing previous seeds to be used, and some of those fallback seeds to not be tried.
This commit is contained in:
parent
cd22cb807a
commit
1590183965
2 changed files with 11 additions and 3 deletions
|
@ -316,6 +316,7 @@ namespace nodetool
|
||||||
std::list<epee::net_utils::network_address> m_priority_peers;
|
std::list<epee::net_utils::network_address> m_priority_peers;
|
||||||
std::vector<epee::net_utils::network_address> m_exclusive_peers;
|
std::vector<epee::net_utils::network_address> m_exclusive_peers;
|
||||||
std::vector<epee::net_utils::network_address> m_seed_nodes;
|
std::vector<epee::net_utils::network_address> m_seed_nodes;
|
||||||
|
bool m_fallback_seed_nodes_added;
|
||||||
std::list<nodetool::peerlist_entry> m_command_line_peers;
|
std::list<nodetool::peerlist_entry> m_command_line_peers;
|
||||||
uint64_t m_peer_livetime;
|
uint64_t m_peer_livetime;
|
||||||
//keep connections to initiate some interactions
|
//keep connections to initiate some interactions
|
||||||
|
|
|
@ -405,6 +405,7 @@ namespace nodetool
|
||||||
bool res = handle_command_line(vm);
|
bool res = handle_command_line(vm);
|
||||||
CHECK_AND_ASSERT_MES(res, false, "Failed to handle command line");
|
CHECK_AND_ASSERT_MES(res, false, "Failed to handle command line");
|
||||||
|
|
||||||
|
m_fallback_seed_nodes_added = false;
|
||||||
if (m_nettype == cryptonote::TESTNET)
|
if (m_nettype == cryptonote::TESTNET)
|
||||||
{
|
{
|
||||||
memcpy(&m_network_id, &::config::testnet::NETWORK_ID, 16);
|
memcpy(&m_network_id, &::config::testnet::NETWORK_ID, 16);
|
||||||
|
@ -498,6 +499,7 @@ namespace nodetool
|
||||||
|
|
||||||
for (const auto &peer: get_seed_nodes(cryptonote::MAINNET))
|
for (const auto &peer: get_seed_nodes(cryptonote::MAINNET))
|
||||||
full_addrs.insert(peer);
|
full_addrs.insert(peer);
|
||||||
|
m_fallback_seed_nodes_added = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1134,7 +1136,6 @@ namespace nodetool
|
||||||
|
|
||||||
size_t try_count = 0;
|
size_t try_count = 0;
|
||||||
size_t current_index = crypto::rand<size_t>()%m_seed_nodes.size();
|
size_t current_index = crypto::rand<size_t>()%m_seed_nodes.size();
|
||||||
bool fallback_nodes_added = false;
|
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
if(m_net_server.is_stop_signal_sent())
|
if(m_net_server.is_stop_signal_sent())
|
||||||
|
@ -1144,15 +1145,21 @@ namespace nodetool
|
||||||
break;
|
break;
|
||||||
if(++try_count > m_seed_nodes.size())
|
if(++try_count > m_seed_nodes.size())
|
||||||
{
|
{
|
||||||
if (!fallback_nodes_added)
|
if (!m_fallback_seed_nodes_added)
|
||||||
{
|
{
|
||||||
MWARNING("Failed to connect to any of seed peers, trying fallback seeds");
|
MWARNING("Failed to connect to any of seed peers, trying fallback seeds");
|
||||||
|
current_index = m_seed_nodes.size();
|
||||||
for (const auto &peer: get_seed_nodes(m_nettype))
|
for (const auto &peer: get_seed_nodes(m_nettype))
|
||||||
{
|
{
|
||||||
MDEBUG("Fallback seed node: " << peer);
|
MDEBUG("Fallback seed node: " << peer);
|
||||||
append_net_address(m_seed_nodes, peer);
|
append_net_address(m_seed_nodes, peer);
|
||||||
}
|
}
|
||||||
fallback_nodes_added = true;
|
m_fallback_seed_nodes_added = true;
|
||||||
|
if (current_index == m_seed_nodes.size())
|
||||||
|
{
|
||||||
|
MWARNING("No fallback seeds, continuing without seeds");
|
||||||
|
break;
|
||||||
|
}
|
||||||
// continue for another few cycles
|
// continue for another few cycles
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue