Skip to content

Commit

Permalink
Reverse track_reachout return value
Browse files Browse the repository at this point in the history
  • Loading branch information
pwojcikdev committed Mar 16, 2024
1 parent 06b2ad7 commit 46fb760
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 24 deletions.
8 changes: 4 additions & 4 deletions nano/core_test/network.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -759,7 +759,7 @@ TEST (network, peer_max_tcp_attempts)
node->network.merge_peer (node2->network.endpoint ());
}
ASSERT_EQ (0, node->network.size ());
ASSERT_TRUE (node->network.tcp_channels.track_reachout (nano::endpoint (node->network.endpoint ().address (), system.get_available_port ())));
ASSERT_FALSE (node->network.tcp_channels.track_reachout (nano::endpoint (node->network.endpoint ().address (), system.get_available_port ())));
ASSERT_EQ (1, node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_ip, nano::stat::dir::out));
}
#endif
Expand All @@ -779,11 +779,11 @@ namespace transport
{
auto address (boost::asio::ip::address_v6::v4_mapped (boost::asio::ip::address_v4 (0x7f000001 + i))); // 127.0.0.1 hex
nano::endpoint endpoint (address, system.get_available_port ());
ASSERT_FALSE (node->network.tcp_channels.track_reachout (endpoint));
ASSERT_TRUE (node->network.tcp_channels.track_reachout (endpoint));
}
ASSERT_EQ (0, node->network.size ());
ASSERT_EQ (0, node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_subnetwork, nano::stat::dir::out));
ASSERT_TRUE (node->network.tcp_channels.track_reachout (nano::endpoint (boost::asio::ip::make_address_v6 ("::ffff:127.0.0.1"), system.get_available_port ())));
ASSERT_FALSE (node->network.tcp_channels.track_reachout (nano::endpoint (boost::asio::ip::make_address_v6 ("::ffff:127.0.0.1"), system.get_available_port ())));
ASSERT_EQ (1, node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_subnetwork, nano::stat::dir::out));
}
}
Expand Down Expand Up @@ -974,7 +974,7 @@ TEST (network, tcp_no_connect_excluded_peers)
ASSERT_EQ (nullptr, node0->network.find_node_id (node1->get_node_id ()));

// Should not actively reachout to excluded peers
ASSERT_TRUE (node0->network.track_reachout (node1->network.endpoint ()));
ASSERT_FALSE (node0->network.track_reachout (node1->network.endpoint ()));

// Erasing from excluded peers should allow a connection
node0->network.excluded_peers.remove (endpoint1_tcp);
Expand Down
10 changes: 5 additions & 5 deletions nano/core_test/peer_container.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,19 +217,19 @@ TEST (peer_container, reachout)
auto outer_node1 = nano::test::add_outer_node (system);
ASSERT_NE (nullptr, nano::test::establish_tcp (system, node1, outer_node1->network.endpoint ()));
// Make sure having been contacted by them already indicates we shouldn't reach out
ASSERT_TRUE (node1.network.track_reachout (outer_node1->network.endpoint ()));
ASSERT_FALSE (node1.network.track_reachout (outer_node1->network.endpoint ()));
auto outer_node2 = nano::test::add_outer_node (system);
ASSERT_FALSE (node1.network.track_reachout (outer_node2->network.endpoint ()));
ASSERT_TRUE (node1.network.track_reachout (outer_node2->network.endpoint ()));
ASSERT_NE (nullptr, nano::test::establish_tcp (system, node1, outer_node2->network.endpoint ()));
// Reaching out to them once should signal we shouldn't reach out again.
ASSERT_TRUE (node1.network.track_reachout (outer_node2->network.endpoint ()));
ASSERT_FALSE (node1.network.track_reachout (outer_node2->network.endpoint ()));
// Make sure we don't purge new items
node1.network.cleanup (std::chrono::steady_clock::now () - std::chrono::seconds (10));
ASSERT_TRUE (node1.network.track_reachout (outer_node2->network.endpoint ()));
ASSERT_FALSE (node1.network.track_reachout (outer_node2->network.endpoint ()));
// Make sure we purge old items
node1.network.cleanup (std::chrono::steady_clock::now () + std::chrono::seconds (10));
ASSERT_TIMELY (5s, node1.network.empty ());
ASSERT_FALSE (node1.network.track_reachout (outer_node2->network.endpoint ()));
ASSERT_TRUE (node1.network.track_reachout (outer_node2->network.endpoint ()));
}

// This test is similar to network.filter_invalid_version_using with the difference that
Expand Down
9 changes: 4 additions & 5 deletions nano/node/network.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ void nano::network::merge_peers (std::array<nano::endpoint, 8> const & peers_a)

void nano::network::merge_peer (nano::endpoint const & peer_a)
{
if (!track_reachout (peer_a))
if (track_reachout (peer_a))
{
node.stats.inc (nano::stat::type::network, nano::stat::detail::merge_peer);

Expand Down Expand Up @@ -484,12 +484,11 @@ bool nano::network::not_a_peer (nano::endpoint const & endpoint_a, bool allow_lo
bool nano::network::track_reachout (nano::endpoint const & endpoint_a)
{
// Don't contact invalid IPs
bool error = not_a_peer (endpoint_a, node.config.allow_local_peers);
if (!error)
if (not_a_peer (endpoint_a, node.config.allow_local_peers))
{
error = tcp_channels.track_reachout (endpoint_a);
return false;
}
return error;
return tcp_channels.track_reachout (endpoint_a);
}

std::deque<std::shared_ptr<nano::transport::channel>> nano::network::list (std::size_t count_a, uint8_t minimum_version_a, bool include_tcp_temporary_channels_a)
Expand Down
2 changes: 1 addition & 1 deletion nano/node/node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1120,7 +1120,7 @@ void nano::node::add_initial_peers ()
for (auto i (store.peer.begin (transaction)), n (store.peer.end ()); i != n; ++i)
{
nano::endpoint endpoint (boost::asio::ip::address_v6 (i->first.address_bytes ()), i->first.port ());
if (!network.track_reachout (endpoint))
if (network.track_reachout (endpoint))
{
network.tcp_channels.start_tcp (endpoint);
}
Expand Down
31 changes: 22 additions & 9 deletions nano/node/transport/tcp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -444,18 +444,31 @@ bool nano::transport::tcp_channels::max_ip_or_subnetwork_connections (nano::tcp_

bool nano::transport::tcp_channels::track_reachout (nano::endpoint const & endpoint_a)
{
auto tcp_endpoint (nano::transport::map_endpoint_to_tcp (endpoint_a));
auto const tcp_endpoint = nano::transport::map_endpoint_to_tcp (endpoint_a);

// Don't overload single IP
bool error = node.network.excluded_peers.check (tcp_endpoint) || max_ip_or_subnetwork_connections (tcp_endpoint);
if (!error && !node.flags.disable_tcp_realtime)
if (max_ip_or_subnetwork_connections (tcp_endpoint))
{
// Don't keepalive to nodes that already sent us something
error |= find_channel (tcp_endpoint) != nullptr;
nano::lock_guard<nano::mutex> lock{ mutex };
auto inserted (attempts.emplace (tcp_endpoint));
error |= !inserted.second;
return false;
}
return error;
if (node.network.excluded_peers.check (tcp_endpoint))
{
return false;
}
if (node.flags.disable_tcp_realtime)
{
return false;
}

// Don't keepalive to nodes that already sent us something
if (find_channel (tcp_endpoint) != nullptr)
{
return false;
}

nano::lock_guard<nano::mutex> lock{ mutex };
auto [it, inserted] = attempts.emplace (tcp_endpoint);
return inserted;
}

std::unique_ptr<nano::container_info_component> nano::transport::tcp_channels::collect_container_info (std::string const & name)
Expand Down

0 comments on commit 46fb760

Please sign in to comment.