limit connections

pull/936/head
Jeff Becker 5 years ago
parent 0f4c531d06
commit 01b24c7090
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -67,6 +67,9 @@ namespace llarp
virtual size_t
NumberOfConnectedClients() const = 0;
virtual size_t
NumberOfPendingConnections() const = 0;
virtual bool
GetRandomConnectedRouter(RouterContact &router) const = 0;

@ -241,6 +241,23 @@ namespace llarp
return connectedClients.size();
}
size_t
LinkManager::NumberOfPendingConnections() const
{
size_t pending = 0;
for(const auto &link : inboundLinks)
{
pending += link->NumberOfPendingSessions();
}
for(const auto &link : outboundLinks)
{
pending += link->NumberOfPendingSessions();
}
return pending;
}
bool
LinkManager::GetRandomConnectedRouter(RouterContact &router) const
{

@ -66,6 +66,9 @@ namespace llarp
size_t
NumberOfConnectedClients() const override;
size_t
NumberOfPendingConnections() const override;
bool
GetRandomConnectedRouter(RouterContact &router) const override;

@ -205,6 +205,14 @@ namespace llarp
// void
// RemovePending(ILinkSession* s) LOCKS_EXCLUDED(m_PendingMutex);
/// count the number of sessions that are yet to be fully connected
size_t
NumberOfPendingSessions() const
{
ACQUIRE_LOCK(Lock_t lock, m_PendingMutex);
return m_Pending.size();
}
private:
static void
on_timer_tick(void* user, uint64_t orig, uint64_t left)

@ -12,6 +12,7 @@
#include <util/types.hpp>
#include <memory>
#include <unordered_map>
namespace llarp
{
@ -104,7 +105,8 @@ namespace llarp
void
RemovePathSet(PathSet_ptr set);
using TransitHopsMap_t = std::multimap< PathID_t, TransitHop_ptr >;
using TransitHopsMap_t =
std::unordered_multimap< PathID_t, TransitHop_ptr, PathID_t::Hash >;
struct SyncTransitMap_t
{
@ -125,7 +127,8 @@ namespace llarp
};
// maps path id -> pathset owner of path
using OwnedPathsMap_t = std::map< PathID_t, Path_ptr >;
using OwnedPathsMap_t =
std::unordered_map< PathID_t, Path_ptr, PathID_t::Hash >;
struct SyncOwnedPathsMap_t
{

@ -831,8 +831,12 @@ namespace llarp
_linkManager.CheckPersistingSessions(now);
const size_t connected = NumberOfConnectedRouters();
const size_t N = nodedb()->num_loaded();
size_t connected = NumberOfConnectedRouters();
if(not isSvcNode)
{
connected += _linkManager.NumberOfPendingConnections();
}
const size_t N = nodedb()->num_loaded();
if(N < llarp::path::default_len)
{
LogInfo("We need at least ", llarp::path::default_len,
@ -1231,8 +1235,16 @@ namespace llarp
}
void
Router::ConnectToRandomRouters(int want)
Router::ConnectToRandomRouters(int _want)
{
const size_t want = _want;
auto connected = NumberOfConnectedRouters();
if(not IsServiceNode())
{
connected += _linkManager.NumberOfPendingConnections();
}
if(connected >= want)
return;
_outboundSessionMaker.ConnectToRandomRouters(want, Now());
}

Loading…
Cancel
Save