mirror of
https://github.com/monero-project/monero.git
synced 2024-11-18 00:37:43 +00:00
p2p: fallback on seed nodes if we can't make a connection
This avoids failing to connect to the network in case all known peers are unavailable (which can happen if the peer list is small).
This commit is contained in:
parent
181a008aa3
commit
7591c528d0
2 changed files with 26 additions and 6 deletions
|
@ -226,6 +226,7 @@ namespace nodetool
|
|||
bool is_addr_recently_failed(const epee::net_utils::network_address& addr);
|
||||
bool is_priority_node(const epee::net_utils::network_address& na);
|
||||
std::set<std::string> get_seed_nodes(bool testnet) const;
|
||||
bool connect_to_seed();
|
||||
|
||||
template <class Container>
|
||||
bool connect_to_peerlist(const Container& peers);
|
||||
|
|
|
@ -1171,14 +1171,11 @@ namespace nodetool
|
|||
}
|
||||
//-----------------------------------------------------------------------------------
|
||||
template<class t_payload_net_handler>
|
||||
bool node_server<t_payload_net_handler>::connections_maker()
|
||||
bool node_server<t_payload_net_handler>::connect_to_seed()
|
||||
{
|
||||
if (!connect_to_peerlist(m_exclusive_peers)) return false;
|
||||
if (m_seed_nodes.empty())
|
||||
return true;
|
||||
|
||||
if (!m_exclusive_peers.empty()) return true;
|
||||
|
||||
if(!m_peerlist.get_white_peers_count() && m_seed_nodes.size())
|
||||
{
|
||||
size_t try_count = 0;
|
||||
size_t current_index = crypto::rand<size_t>()%m_seed_nodes.size();
|
||||
bool fallback_nodes_added = false;
|
||||
|
@ -1211,6 +1208,21 @@ namespace nodetool
|
|||
if(++current_index >= m_seed_nodes.size())
|
||||
current_index = 0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------
|
||||
template<class t_payload_net_handler>
|
||||
bool node_server<t_payload_net_handler>::connections_maker()
|
||||
{
|
||||
if (!connect_to_peerlist(m_exclusive_peers)) return false;
|
||||
|
||||
if (!m_exclusive_peers.empty()) return true;
|
||||
|
||||
size_t start_conn_count = get_outgoing_connections_count();
|
||||
if(!m_peerlist.get_white_peers_count() && m_seed_nodes.size())
|
||||
{
|
||||
if (!connect_to_seed())
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!connect_to_peerlist(m_priority_peers)) return false;
|
||||
|
@ -1242,6 +1254,13 @@ namespace nodetool
|
|||
}
|
||||
}
|
||||
|
||||
if (start_conn_count == get_outgoing_connections_count() && start_conn_count < m_config.m_net_config.connections_count)
|
||||
{
|
||||
MINFO("Failed to connect to any, trying seeds");
|
||||
if (!connect_to_seed())
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in a new issue