This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 5f5ec1c35bb [test](build index)Remove index_meta in tablet schema when 
the index is dropped. (#37646) (#37902)
5f5ec1c35bb is described below

commit 5f5ec1c35bb5c26ce6597824e755f035cb9b21a0
Author: qiye <jianliang5...@gmail.com>
AuthorDate: Tue Jul 16 20:32:02 2024 +0800

    [test](build index)Remove index_meta in tablet schema when the index is 
dropped. (#37646) (#37902)
---
 be/src/olap/task/index_builder.cpp                 |  20 ++++
 ...index_builder_drop_index_fault_injection.groovy | 105 +++++++++++++++++++++
 2 files changed, 125 insertions(+)

diff --git a/be/src/olap/task/index_builder.cpp 
b/be/src/olap/task/index_builder.cpp
index 7f2f6af3740..4680bdd0cea 100644
--- a/be/src/olap/task/index_builder.cpp
+++ b/be/src/olap/task/index_builder.cpp
@@ -18,6 +18,7 @@
 #include "olap/task/index_builder.h"
 
 #include "common/status.h"
+#include "gutil/integral_types.h"
 #include "olap/rowset/beta_rowset.h"
 #include "olap/rowset/rowset_writer.h"
 #include "olap/rowset/rowset_writer_context.h"
@@ -68,9 +69,28 @@ Status IndexBuilder::update_inverted_index_info() {
             // base on input rowset's tablet_schema to build
             // output rowset's tablet_schema which only remove
             // the indexes specified in this drop index request
+            // ATTN: DO NOT REMOVE INDEX AFTER OUTPUT_ROWSET_WRITER CREATED.
             for (auto t_inverted_index : _alter_inverted_indexes) {
                 
output_rs_tablet_schema->remove_index(t_inverted_index.index_id);
             }
+            
DBUG_EXECUTE_IF("index_builder.update_inverted_index_info.drop_index", {
+                auto indexes_count = 
DebugPoints::instance()->get_debug_param_or_default<int32_t>(
+                        "index_builder.update_inverted_index_info.drop_index", 
"indexes_count", 0);
+                if (indexes_count < 0) {
+                    return Status::Error<ErrorCode::INTERNAL_ERROR>(
+                            "indexes count cannot be negative");
+                }
+                int32_t indexes_size = 0;
+                for (auto index : output_rs_tablet_schema->indexes()) {
+                    if (index.index_type() == IndexType::INVERTED) {
+                        indexes_size++;
+                    }
+                }
+                if (indexes_count != indexes_size) {
+                    return Status::Error<ErrorCode::INTERNAL_ERROR>(
+                            "indexes count not equal to expected");
+                }
+            })
         } else {
             // base on input rowset's tablet_schema to build
             // output rowset's tablet_schema which only add
diff --git 
a/regression-test/suites/fault_injection_p0/test_index_builder_drop_index_fault_injection.groovy
 
b/regression-test/suites/fault_injection_p0/test_index_builder_drop_index_fault_injection.groovy
new file mode 100644
index 00000000000..bc378727e9a
--- /dev/null
+++ 
b/regression-test/suites/fault_injection_p0/test_index_builder_drop_index_fault_injection.groovy
@@ -0,0 +1,105 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+import org.codehaus.groovy.runtime.IOGroovyMethods
+
+suite("test_index_builder_drop_index_fault_injection", "nonConcurrent") {
+    def runTest = { indexTbName ->
+        sql """ insert into ${indexTbName} values(1, "json love anny", "json", 
"anny",1); """
+        sql "sync"
+
+        def show_result = sql_return_maparray "show index from ${indexTbName}"
+        logger.info("show index from " + indexTbName + " result: " + 
show_result)
+        assertEquals(show_result.size(), 4)
+        assertEquals(show_result[0].Key_name, "index_int")
+        assertEquals(show_result[1].Key_name, "index_str_k2")
+        assertEquals(show_result[2].Key_name, "index_str_k4")
+        assertEquals(show_result[3].Key_name, "index_k5")
+
+        try {
+            
GetDebugPoint().enableDebugPointForAllBEs("segment_iterator._read_columns_by_index",
 [indexes_count: 3])
+            sql "DROP INDEX index_int ON ${indexTbName}"
+            show_result = sql_return_maparray "show index from ${indexTbName}"
+            logger.info("show index from " + indexTbName + " result: " + 
show_result)
+            assertEquals(show_result.size(), 3)
+            assertEquals(show_result[0].Key_name, "index_str_k2")
+            assertEquals(show_result[1].Key_name, "index_str_k4")
+            assertEquals(show_result[2].Key_name, "index_k5")
+        } finally {
+            
GetDebugPoint().disableDebugPointForAllBEs("index_builder.update_inverted_index_info.drop_index")
+        }
+
+        try {
+            
GetDebugPoint().enableDebugPointForAllBEs("segment_iterator._read_columns_by_index",
 [indexes_count: 2])
+            sql "DROP INDEX index_str_k2 ON ${indexTbName}"
+            show_result = sql_return_maparray "show index from ${indexTbName}"
+            logger.info("show index from " + indexTbName + " result: " + 
show_result)
+            assertEquals(show_result.size(), 2)
+            assertEquals(show_result[0].Key_name, "index_str_k4")
+            assertEquals(show_result[1].Key_name, "index_k5")
+        } finally {
+            
GetDebugPoint().disableDebugPointForAllBEs("index_builder.update_inverted_index_info.drop_index")
+        }
+
+        try {
+            
GetDebugPoint().enableDebugPointForAllBEs("segment_iterator._read_columns_by_index",
 [indexes_count: 1])
+            sql "DROP INDEX index_str_k4 ON ${indexTbName}"
+            show_result = sql_return_maparray "show index from ${indexTbName}"
+            logger.info("show index from " + indexTbName + " result: " + 
show_result)
+            assertEquals(show_result.size(), 1)
+            assertEquals(show_result[0].Key_name, "index_k5")
+        } finally {
+            
GetDebugPoint().disableDebugPointForAllBEs("index_builder.update_inverted_index_info.drop_index")
+        }
+
+        try {
+            
GetDebugPoint().enableDebugPointForAllBEs("segment_iterator._read_columns_by_index",
 [indexes_count: 0])
+            sql "DROP INDEX index_k5 ON ${indexTbName}"
+            show_result = sql_return_maparray "show index from ${indexTbName}"
+            logger.info("show index from " + indexTbName + " result: " + 
show_result)
+            assertEquals(show_result.size(), 0)
+        } finally {
+            
GetDebugPoint().disableDebugPointForAllBEs("index_builder.update_inverted_index_info.drop_index")
+        }
+    }
+
+    def createTestTable = { ->
+        def indexTbName = "test_index_builder_drop_index_fault_injection"
+
+        sql "DROP TABLE IF EXISTS ${indexTbName}"
+        sql """
+          CREATE TABLE ${indexTbName}
+          (
+              k1 int ,
+              k2 string,
+              k3 char(50),
+              k4 varchar(200),
+              k5 int,
+              index index_int (k1) using inverted,
+              index index_str_k2 (k2) using inverted 
properties("parser"="english","ignore_above"="257"),
+              index index_str_k4 (k4) using inverted,
+              index index_k5 (k5) using inverted
+          )
+          DISTRIBUTED BY RANDOM BUCKETS 10
+          PROPERTIES("replication_num" = "1");
+        """
+
+        runTest(indexTbName)
+    }
+
+    createTestTable()
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to