tag chunkpicker for update more often

This commit is contained in:
Green Sky 2024-08-04 10:14:59 +02:00
parent 9e2911b36c
commit 07099e4832
No known key found for this signature in database

View File

@ -1372,7 +1372,7 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCEXT_ft1_have& e) {
// we might not know yet // we might not know yet
if (addParticipation(c, o)) { if (addParticipation(c, o)) {
// something happend, update chunk picker // something happend, update chunk picker
c.emplace_or_replace<ChunkPickerUpdateTag>(); //c.emplace_or_replace<ChunkPickerUpdateTag>();
} }
auto& remote_have = o.get_or_emplace<Components::RemoteHaveBitset>().others; auto& remote_have = o.get_or_emplace<Components::RemoteHaveBitset>().others;
@ -1381,14 +1381,17 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCEXT_ft1_have& e) {
remote_have.emplace(c, Components::RemoteHaveBitset::Entry{false, num_total_chunks}); remote_have.emplace(c, Components::RemoteHaveBitset::Entry{false, num_total_chunks});
// new have? nice // new have? nice
// (always update on biset, not always on have) //c.emplace_or_replace<ChunkPickerUpdateTag>();
c.emplace_or_replace<ChunkPickerUpdateTag>();
} }
auto& remote_have_peer = remote_have.at(c); auto& remote_have_peer = remote_have.at(c);
if (!remote_have_peer.have_all) { if (remote_have_peer.have_all) {
return true; // peer somehow already had all, ignoring
}
assert(remote_have_peer.have.size_bits() >= num_total_chunks); assert(remote_have_peer.have.size_bits() >= num_total_chunks);
bool a_valid_change {false};
for (const auto c_i : e.chunks) { for (const auto c_i : e.chunks) {
if (c_i >= num_total_chunks) { if (c_i >= num_total_chunks) {
std::cerr << "SHA1_NGCFT1 error: remote sent have with out-of-range chunk index!!!\n"; std::cerr << "SHA1_NGCFT1 error: remote sent have with out-of-range chunk index!!!\n";
@ -1398,6 +1401,12 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCEXT_ft1_have& e) {
assert(c_i < num_total_chunks); assert(c_i < num_total_chunks);
remote_have_peer.have.set(c_i); remote_have_peer.have.set(c_i);
a_valid_change = true;
}
if (a_valid_change) {
// new have? nice
c.emplace_or_replace<ChunkPickerUpdateTag>();
} }
// check for completion? // check for completion?
@ -1415,7 +1424,6 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCEXT_ft1_have& e) {
remote_have_peer.have_all = true; remote_have_peer.have_all = true;
remote_have_peer.have = BitSet{}; remote_have_peer.have = BitSet{};
} }
}
return true; return true;
} }
@ -1491,7 +1499,6 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCEXT_ft1_bitset& e) {
} }
// new have? nice // new have? nice
// (always update on bitset, not always on have)
c.emplace_or_replace<ChunkPickerUpdateTag>(); c.emplace_or_replace<ChunkPickerUpdateTag>();
return true; return true;
@ -1530,7 +1537,6 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCEXT_ft1_have_all& e) {
remote_have[c] = Components::RemoteHaveBitset::Entry{true, {}}; remote_have[c] = Components::RemoteHaveBitset::Entry{true, {}};
// new have? nice // new have? nice
// (always update on have_all, not always on have)
c.emplace_or_replace<ChunkPickerUpdateTag>(); c.emplace_or_replace<ChunkPickerUpdateTag>();
return true; return true;