Merge pull request #1041 from notlesh/dht-fixes-cleanup

Dht fixes cleanup
pull/1045/head
Jason Rhinelander 4 years ago committed by GitHub
commit ba89df40c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -48,6 +48,10 @@ namespace llarp
valuesFound.resize(1);
valuesFound[0] = found;
}
else
{
llarp::LogWarn("We found a null RC for dht request, dropping it");
}
}
routing::DHTMessage msg;
msg.M.emplace_back(new GotRouterMessage(parent->OurKey(), whoasked.txid,

@ -14,6 +14,7 @@
#include <iterator>
#include <functional>
#include <random>
namespace llarp
{
@ -48,6 +49,13 @@ namespace llarp
" routers");
}
bool
RCLookupHandler::HaveReceivedWhitelist()
{
util::Lock l(&_mutex);
return whitelistRouters.empty();
}
void
RCLookupHandler::GetRC(const RouterID &router, RCRequestCallback callback,
bool forceLookup)
@ -240,20 +248,29 @@ namespace llarp
if(useWhitelist)
{
std::set< RouterID > lookupRouters;
static constexpr size_t LookupPerTick = 25;
std::vector< RouterID > lookupRouters;
lookupRouters.reserve(LookupPerTick);
{
static constexpr size_t LookupPerTick = 25;
// if we are using a whitelist look up a few routers we don't have
util::Lock l(&_mutex);
for(const auto &r : whitelistRouters)
{
if(_nodedb->Has(r))
continue;
lookupRouters.emplace(r);
if(lookupRouters.size() >= LookupPerTick)
break;
lookupRouters.emplace_back(r);
}
}
if(lookupRouters.size() > LookupPerTick)
{
static std::mt19937_64 rng{std::random_device{}()};
std::shuffle(lookupRouters.begin(), lookupRouters.end(), rng);
lookupRouters.resize(LookupPerTick);
}
for(const auto &r : lookupRouters)
GetRC(r, nullptr, true);
return;

@ -40,6 +40,9 @@ namespace llarp
SetRouterWhitelist(const std::vector< RouterID > &routers) override
LOCKS_EXCLUDED(_mutex);
bool
HaveReceivedWhitelist();
void
GetRC(const RouterID &router, RCRequestCallback callback,
bool forceLookup = false) override LOCKS_EXCLUDED(_mutex);

@ -679,7 +679,7 @@ namespace llarp
LogError("Failed to update our RC");
}
if(isSvcNode)
if(isSvcNode && _rcLookupHandler.HaveReceivedWhitelist())
{
// remove RCs for nodes that are no longer allowed by network policy
nodedb()->RemoveIf([&](const RouterContact &rc) -> bool {

Loading…
Cancel
Save