mirror of
https://github.com/savoirfairelinux/opendht.git
synced 2026-11-08 04:21:51 +00:00
dht: try inserting new nodes smarter
Attempt closest search and nearby searches until we are too far instead of trying every search.
This commit is contained in:
1 parent
274621dcec
commit
de82eec516
1 file changed
+22
-6
+22
-6
@@ -815,15 +815,31 @@ Dht::trySearchInsert(const std::shared_ptr<Node>& node)
|
||||
const auto& now = scheduler.time();
|
||||
if (not node) return false;
|
||||
|
||||
bool inserted = false;
|
||||
auto family = node->getFamily();
|
||||
auto& srs = family == AF_INET ? searches4 : searches6;
|
||||
for (auto& srp : srs) {
|
||||
auto& s = *srp.second;
|
||||
auto& srs = searches(node->getFamily());
|
||||
auto closest = srs.lower_bound(node->id);
|
||||
bool inserted {false};
|
||||
|
||||
// insert forward
|
||||
auto it = closest;
|
||||
while (it != srs.end()) {
|
||||
auto& s = *it->second;
|
||||
if (s.insertNode(node, now)) {
|
||||
inserted = true;
|
||||
scheduler.edit(s.nextSearchStep, s.getNextStepTime(now));
|
||||
}
|
||||
} else
|
||||
break;
|
||||
++it;
|
||||
}
|
||||
// insert backward
|
||||
it = closest;
|
||||
while (it != srs.begin()) {
|
||||
--it;
|
||||
auto& s = *it->second;
|
||||
if (s.insertNode(node, now)) {
|
||||
inserted = true;
|
||||
scheduler.edit(s.nextSearchStep, s.getNextStepTime(now));
|
||||
} else
|
||||
break;
|
||||
}
|
||||
return inserted;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user