diff --git a/solanaceae/ngc_ft1_sha1/chunk_picker.cpp b/solanaceae/ngc_ft1_sha1/chunk_picker.cpp index d105195..3dd7ebd 100644 --- a/solanaceae/ngc_ft1_sha1/chunk_picker.cpp +++ b/solanaceae/ngc_ft1_sha1/chunk_picker.cpp @@ -285,7 +285,7 @@ std::vector ChunkPicker::updateChunkRequests( const auto* lhb = o.try_get(); // if we dont have anything, this might not exist yet - BitSet chunk_candidates = lhb == nullptr ? BitSet{total_chunks} : lhb->have; + BitSet chunk_candidates = lhb == nullptr ? BitSet{total_chunks} : (lhb->have.size_bits() >= total_chunks ? lhb->have : BitSet{total_chunks}); if (!other_have.have_all) { // AND is the same as ~(~A | ~B) diff --git a/solanaceae/ngc_ft1_sha1/sha1_ngcft1.cpp b/solanaceae/ngc_ft1_sha1/sha1_ngcft1.cpp index 074fcdb..fef2e3e 100644 --- a/solanaceae/ngc_ft1_sha1/sha1_ngcft1.cpp +++ b/solanaceae/ngc_ft1_sha1/sha1_ngcft1.cpp @@ -573,7 +573,7 @@ bool SHA1_NGCFT1::onEvent(const ObjectStore::Events::ObjectUpdate& e) { { // next, create chuck cache and check for existing data auto& transfer_stats = e.e.get_or_emplace(); auto& lhb = e.e.get_or_emplace(); - if (lhb.have.size_bytes() < info.chunks.size()/8) { + if (lhb.have.size_bits() < info.chunks.size()) { lhb.have = BitSet{info.chunks.size()}; } auto& cc = e.e.emplace(); @@ -1027,7 +1027,7 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_done& e) { if (!o.all_of()) { { - auto& lhb = o.get_or_emplace(info.chunks.size()); + auto& lhb = o.get_or_emplace(BitSet{info.chunks.size()}); for (const auto inner_chunk_index : transfer.getChunk().chunk_indices) { if (lhb.have[inner_chunk_index]) { continue;