mirror of https://github.com/oxen-io/lokinet
limit connections
This commit is contained in:
parent
0f4c531d06
commit
01b24c7090
|
@ -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…
Reference in New Issue