fix: fix build interim index failures (#42679)

issue: #42028 

W20250522 09:52:55.785657 12779 ChunkedSegmentSealedImpl.cpp:1752]
[SERVER][generate_interim_index][CGO_LOAD][]fail to generate binlog
index, because bad optional access

After the cachelayer is added, num_rows_ can not be obtained before
interim index generated , and an external parameter pass is required

Signed-off-by: foxspy <xianliang.li@zilliz.com>
This commit is contained in:
foxspy
2025-06-12 05:12:39 +08:00
committed by GitHub
parent a72463c619
commit 58f9278db7
2 changed files with 5 additions and 9 deletions
@@ -1679,7 +1679,8 @@ ChunkedSegmentSealedImpl::mask_with_timestamps(BitsetTypeView& bitset_chunk,
}
bool
ChunkedSegmentSealedImpl::generate_interim_index(const FieldId field_id) {
ChunkedSegmentSealedImpl::generate_interim_index(const FieldId field_id,
int64_t num_rows) {
if (col_index_meta_ == nullptr || !col_index_meta_->HasFiled(field_id)) {
return false;
}
@@ -1723,12 +1724,7 @@ ChunkedSegmentSealedImpl::generate_interim_index(const FieldId field_id) {
return false;
}
try {
// get binlog data and meta
int64_t row_count;
{
std::shared_lock lck(mutex_);
row_count = num_rows_.value();
}
int64_t row_count = num_rows;
// generate index params
auto field_binlog_config = std::unique_ptr<VecIndexConfig>(
@@ -1861,7 +1857,7 @@ ChunkedSegmentSealedImpl::load_field_data_common(
insert_record_.seal_pks();
}
bool generated_interim_index = generate_interim_index(field_id);
bool generated_interim_index = generate_interim_index(field_id, num_rows);
std::unique_lock lck(mutex_);
set_bit(field_data_ready_bitset_, field_id, true);
@@ -374,7 +374,7 @@ class ChunkedSegmentSealedImpl : public SegmentSealed {
LoadScalarIndex(const LoadIndexInfo& info);
bool
generate_interim_index(const FieldId field_id);
generate_interim_index(const FieldId field_id, int64_t num_rows);
void
fill_empty_field(const FieldMeta& field_meta);