mirror of https://github.com/milvus-io/milvus.git
fix: Fix performance issue and use after free bug (#39343)
cherry pick some fixes in https://github.com/milvus-io/milvus/pull/39249 Signed-off-by: sunby <sunbingyi1992@gmail.com>pull/39390/head
parent
47e410feb1
commit
56cb1683eb
internal/core/src
exec/expression
segcore
|
@ -684,10 +684,13 @@ class SegmentExpr : public Expr {
|
|||
if constexpr (std::is_same_v<T, std::string_view> ||
|
||||
std::is_same_v<T, Json>) {
|
||||
if (segment_->type() == SegmentType::Sealed) {
|
||||
valid_data = segment_
|
||||
->get_batch_views<T>(
|
||||
field_id_, i, data_pos, size)
|
||||
.second.data();
|
||||
auto batch_views = segment_->get_batch_views<T>(
|
||||
field_id_, i, data_pos, size);
|
||||
valid_data = batch_views.second.data();
|
||||
ApplyValidData(valid_data,
|
||||
res + processed_size,
|
||||
valid_res + processed_size,
|
||||
size);
|
||||
}
|
||||
} else {
|
||||
auto chunk = segment_->chunk_data<T>(field_id_, i);
|
||||
|
@ -695,11 +698,11 @@ class SegmentExpr : public Expr {
|
|||
if (valid_data != nullptr) {
|
||||
valid_data += data_pos;
|
||||
}
|
||||
ApplyValidData(valid_data,
|
||||
res + processed_size,
|
||||
valid_res + processed_size,
|
||||
size);
|
||||
}
|
||||
ApplyValidData(valid_data,
|
||||
res + processed_size,
|
||||
valid_res + processed_size,
|
||||
size);
|
||||
}
|
||||
|
||||
processed_size += size;
|
||||
|
|
|
@ -138,8 +138,8 @@ SegmentChunkReader::GetChunkDataAccessor<std::string>(
|
|||
current_chunk_size =
|
||||
segment_->chunk_size(field_id, current_chunk_id);
|
||||
}
|
||||
auto chunk_data = chunk_info.first;
|
||||
auto chunk_valid_data = chunk_info.second;
|
||||
auto& chunk_data = chunk_info.first;
|
||||
auto& chunk_valid_data = chunk_info.second;
|
||||
if (current_chunk_pos < chunk_valid_data.size() &&
|
||||
!chunk_valid_data[current_chunk_pos]) {
|
||||
current_chunk_pos++;
|
||||
|
|
Loading…
Reference in New Issue