未验证 提交 bdcd341f 编写于 作者: Y yukun 提交者: GitHub

ListIDInSegment get wrong result when delete more than one ids (#3474)

* ListIDInSegment get wrong result when delete more than one ids
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>

* code format
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>
上级 944e41ad
......@@ -31,6 +31,7 @@ Please mark all changes in change log and use the issue from GitHub
- \#2957 There is no exisitence check of annoy search parameter
- \#3406 No debug and info log generated after server started
- \#3407 Server get stuck if create index after entities inserted with no manual flush
- \#3446 ListIDInSegment get wrong result when delete more than one ids
## Feature
- \#2319 Redo metadata to support MVCC
......
......@@ -41,6 +41,8 @@
#include <fiu/fiu-local.h>
#include <src/scheduler/job/BuildIndexJob.h>
#include <algorithm>
#include <functional>
#include <limits>
#include <unordered_set>
#include <utility>
......@@ -694,7 +696,11 @@ DBImpl::ListIDInSegment(const std::string& collection_name, int64_t segment_id,
STATUS_CHECK(segment_reader->LoadDeletedDocs(deleted_docs_ptr));
if (deleted_docs_ptr) {
const std::vector<offset_t>& delete_ids = deleted_docs_ptr->GetDeletedDocs();
for (auto offset : delete_ids) {
std::vector<offset_t> temp_ids;
temp_ids.reserve(delete_ids.size());
std::copy(delete_ids.begin(), delete_ids.end(), std::back_inserter(temp_ids));
std::sort(temp_ids.begin(), temp_ids.end(), std::greater<offset_t>());
for (auto offset : temp_ids) {
entity_ids.erase(entity_ids.begin() + offset, entity_ids.begin() + offset + 1);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册