From 6036ccdbaacc3ff9fd780ff64e6fa5a8f5d63d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Fri, 28 Oct 2016 15:46:27 -0400 Subject: [PATCH] dht: try inserting new nodes smarter (#150) Attempt closest search and nearby searches until we are too far instead of trying every search. --- src/dht.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/dht.cpp b/src/dht.cpp index 0ea8af14..afc03f82 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -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; } -- GitLab