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

Reply via email to