diff --git a/src/dht.cpp b/src/dht.cpp index b09190c5129d4d6dde72ae470287488f8fa0d468..643b9007ba01bfa9a522e5573453c6f3079e7520 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -518,6 +518,7 @@ void Dht::searchSendAnnounceValue(const Sp<Search>& sr) { } if (sendQuery) { + n.probe_query = PROBE_QUERY; if (logger_) logger_->d(sr->id, n.node->id, "[search %s] [node %s] sending %s", sr->id.toString().c_str(), n.node->toString().c_str(), n.probe_query->toString().c_str()); @@ -527,7 +528,6 @@ void Dht::searchSendAnnounceValue(const Sp<Search>& sr) { -1, onSelectDone, std::bind(&Dht::searchNodeGetExpired, this, _1, _2, ws, PROBE_QUERY)); - n.probe_query = PROBE_QUERY; n.getStatus[PROBE_QUERY] = std::move(req); } if (not n.candidate and ++i == TARGET_NODES) @@ -1912,37 +1912,25 @@ Dht::maintainStorage(decltype(store)::value_type& storage, bool force, const Don const auto& now = scheduler.time(); size_t announce_per_af = 0; - bool want4 = true, want6 = true; - - auto nodes = buckets4.findClosestNodes(storage.first, now); - if (!nodes.empty()) { - if (force || storage.first.xorCmp(nodes.back()->id, myid) < 0) { - for (auto &value : storage.second.getValues()) { - const auto& vt = getType(value.data->type); - if (force || value.created + vt.expiration > now + MAX_STORAGE_MAINTENANCE_EXPIRE_TIME) { - // gotta put that value there - announce(storage.first, AF_INET, value.data, donecb, value.created); - ++announce_per_af; - } - } - want4 = false; - } - } - - auto nodes6 = buckets6.findClosestNodes(storage.first, now); - if (!nodes6.empty()) { - if (force || storage.first.xorCmp(nodes6.back()->id, myid) < 0) { - for (auto &value : storage.second.getValues()) { - const auto& vt = getType(value.data->type); - if (force || value.created + vt.expiration > now + MAX_STORAGE_MAINTENANCE_EXPIRE_TIME) { - // gotta put that value there - announce(storage.first, AF_INET6, value.data, donecb, value.created); - ++announce_per_af; + auto maintain = [&](sa_family_t af){ + bool want = true; + auto nodes = buckets(af).findClosestNodes(storage.first, now); + if (!nodes.empty()) { + if (force || storage.first.xorCmp(nodes.back()->id, myid) < 0) { + for (auto &value : storage.second.getValues()) { + const auto& vt = getType(value.data->type); + if (force || value.created + vt.expiration > now + MAX_STORAGE_MAINTENANCE_EXPIRE_TIME) { + // gotta put that value there + announce(storage.first, af, value.data, donecb, value.created); + ++announce_per_af; + } } + want = false; } - want6 = false; } - } + return want; + }; + bool want4 = maintain(AF_INET), want6 = maintain(AF_INET6); if (not want4 and not want6) { if (logger_)