Fix inserting into growing segment copies data (#22792)

Signed-off-by: yah01 <yang.cen@zilliz.com>
This commit is contained in:
yah01 2023-03-16 20:11:55 +08:00 committed by GitHub
parent 8139106b51
commit ab1ac69712
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 8 deletions

View File

@ -67,7 +67,7 @@ SegmentGrowingImpl::Insert(int64_t reserved_offset,
// step 1: check insert data if valid
std::unordered_map<FieldId, int64_t> field_id_to_offset;
int64_t field_offset = 0;
for (auto field : insert_data->fields_data()) {
for (const auto& field : insert_data->fields_data()) {
auto field_id = FieldId(field.field_id());
AssertInfo(!field_id_to_offset.count(field_id), "duplicate field data");
field_id_to_offset.emplace(field_id, field_offset++);
@ -445,7 +445,7 @@ SegmentGrowingImpl::get_active_count(Timestamp ts) const {
auto row_count = this->get_row_count();
auto& ts_vec = this->get_insert_record().timestamps_;
auto iter = std::upper_bound(
boost::make_counting_iterator((int64_t)0),
boost::make_counting_iterator(static_cast<int64_t>(0)),
boost::make_counting_iterator(row_count),
ts,
[&](Timestamp ts, int64_t index) { return ts < ts_vec[index]; });

View File

@ -18,7 +18,12 @@
#include <string>
#include <utility>
#include "common/FieldMeta.h"
#include "common/LoadInfo.h"
#include "common/Span.h"
#include "common/Utils.h"
#include "exceptions/EasyAssert.h"
#include "fmt/core.h"
namespace milvus::segcore {
@ -44,11 +49,11 @@ class VariableField {
begin++;
}
data_ = (char*)CreateMap(segment_id, field_meta, info);
data_ = static_cast<char*>(CreateMap(segment_id, field_meta, info));
construct_views();
}
VariableField(VariableField&& field)
VariableField(VariableField&& field) noexcept
: indices_(std::move(field.indices_)),
size_(field.size_),
data_(field.data_),
@ -60,8 +65,8 @@ class VariableField {
if (data_ != MAP_FAILED && data_ != nullptr) {
if (munmap(data_, size_)) {
AssertInfo(true,
std::string("failed to unmap variable field err=") +
strerror(errno));
fmt::format("failed to unmap variable field, err={}",
strerror(errno)));
}
}
}
@ -71,12 +76,12 @@ class VariableField {
return data_;
}
const std::vector<std::string_view>&
[[nodiscard]] const std::vector<std::string_view>&
views() const {
return views_;
}
size_t
[[nodiscard]] size_t
size() const {
return size_;
}