This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 79cd7261326ce4281a9a3c2df33f6571d6a50a2b Author: airborne12 <airborn...@gmail.com> AuthorDate: Mon May 27 17:08:06 2024 +0800 [Fix](inverted index) fix race condition in index build (#35427) Fix race condition problem introduced by #35366 , which will cause heap-use-after-free --- be/src/olap/task/index_builder.cpp | 22 +++------------------- be/src/olap/task/index_builder.h | 1 + 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/be/src/olap/task/index_builder.cpp b/be/src/olap/task/index_builder.cpp index 3c54a5b5569..447d57d520c 100644 --- a/be/src/olap/task/index_builder.cpp +++ b/be/src/olap/task/index_builder.cpp @@ -111,6 +111,7 @@ Status IndexBuilder::update_inverted_index_info() { drop_index_size += index_size; } } + _dropped_inverted_indexes.push_back(*index_meta); } } else { // base on input rowset's tablet_schema to build @@ -255,25 +256,8 @@ Status IndexBuilder::handle_single_rowset(RowsetMetaSharedPtr output_rowset_meta output_rowset_schema->get_inverted_index_storage_format()); RETURN_IF_ERROR(inverted_index_file_writer->initialize(dirs)); // create inverted index writer - for (const auto& t_inverted_index : _alter_inverted_indexes) { - DCHECK_EQ(t_inverted_index.columns.size(), 1); - auto column_name = t_inverted_index.columns[0]; - auto column_idx = output_rs_tablet_schema->field_index(column_name); - if (column_idx < 0) { - LOG(WARNING) << "referenced column was missing. " - << "[column=" << column_name - << " referenced_column=" << column_idx << "]"; - continue; - } - auto column = output_rs_tablet_schema->column(column_idx); - const auto* index_meta = output_rs_tablet_schema->get_inverted_index(column); - if (index_meta == nullptr) { - LOG(ERROR) << "failed to find column: " << column_name - << " index_id: " << t_inverted_index.index_id; - continue; - } - RETURN_IF_ERROR(inverted_index_file_writer->delete_index(index_meta)); - output_rs_tablet_schema->remove_index(t_inverted_index.index_id); + for (auto& index_meta : _dropped_inverted_indexes) { + RETURN_IF_ERROR(inverted_index_file_writer->delete_index(&index_meta)); } _inverted_index_file_writers.emplace(seg_ptr->id(), std::move(inverted_index_file_writer)); diff --git a/be/src/olap/task/index_builder.h b/be/src/olap/task/index_builder.h index 75f3b5d2ff0..70fdd6cba2f 100644 --- a/be/src/olap/task/index_builder.h +++ b/be/src/olap/task/index_builder.h @@ -68,6 +68,7 @@ private: TabletSharedPtr _tablet; std::vector<TColumn> _columns; std::vector<doris::TOlapTableIndex> _alter_inverted_indexes; + std::vector<TabletIndex> _dropped_inverted_indexes; bool _is_drop_op; std::set<int64_t> _alter_index_ids; std::vector<RowsetSharedPtr> _input_rowsets; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org