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

Dht fixes cleanup
pull/1045/head
Jason Rhinelander 5 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.resize(1);
valuesFound[0] = found; valuesFound[0] = found;
} }
else
{
llarp::LogWarn("We found a null RC for dht request, dropping it");
}
} }
routing::DHTMessage msg; routing::DHTMessage msg;
msg.M.emplace_back(new GotRouterMessage(parent->OurKey(), whoasked.txid, msg.M.emplace_back(new GotRouterMessage(parent->OurKey(), whoasked.txid,

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

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

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

Loading…
Cancel
Save