From be87c18b448ff8160505bde9633734c95c74c285 Mon Sep 17 00:00:00 2001 From: chyezh Date: Thu, 21 Dec 2023 14:58:49 +0800 Subject: [PATCH] fix: fixup data race at generate binlog index (#29370) issue: #29339 Signed-off-by: chyezh --- internal/core/src/segcore/SegmentSealedImpl.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/core/src/segcore/SegmentSealedImpl.cpp b/internal/core/src/segcore/SegmentSealedImpl.cpp index e8e16c5edb..b70fac1eb7 100644 --- a/internal/core/src/segcore/SegmentSealedImpl.cpp +++ b/internal/core/src/segcore/SegmentSealedImpl.cpp @@ -1455,7 +1455,13 @@ SegmentSealedImpl::generate_binlog_index(const FieldId field_id) { // get binlog data and meta auto row_count = num_rows_.value(); auto dim = field_meta.get_dim(); - auto vec_data = fields_.at(field_id); + std::shared_ptr vec_data{}; + { + // field should be exists. + // otherwise, out_of_range exception is thrown by fields_.at + std::shared_lock lck(mutex_); + vec_data = fields_.at(field_id); + } auto dataset = knowhere::GenDataSet(row_count, dim, (void*)vec_data->Data()); dataset->SetIsOwner(false);