Merge pull request #3737

1590183 p2p: fix fallback seed node usage (moneromooo-monero)
This commit is contained in:
luigi1111 2018-06-16 14:04:01 -05:00
commit abfff766e5
No known key found for this signature in database
GPG key ID: F4ACA0183641E010
2 changed files with 11 additions and 3 deletions

View file

@ -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

View file

@ -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