From 136973d4faefe8bb05914033bc245b2eaa355f9e Mon Sep 17 00:00:00 2001 From: Kang Date: Thu, 5 Oct 2023 22:15:54 +0800 Subject: [PATCH] [fix](testcase) add state check for ADD INDEX before BUILD INDEX to avoid table state not normal (#25038) --- .../index_change/test_index_change_3.groovy | 17 ++++++++++++++ .../index_change/test_index_change_4.groovy | 17 ++++++++++++++ .../index_change/test_index_change_6.groovy | 18 +++++++++++++++ .../index_change/test_index_change_7.groovy | 18 +++++++++++++++ .../test_index_change_with_compaction.groovy | 22 +++++++++++++++++++ .../test_pk_uk_index_change.groovy | 20 +++++++++++++++++ .../inverted_index_p0/test_build_index.groovy | 2 ++ 7 files changed, 114 insertions(+) diff --git a/regression-test/suites/inverted_index_p0/index_change/test_index_change_3.groovy b/regression-test/suites/inverted_index_p0/index_change/test_index_change_3.groovy index 34a416f0d8..c2d1d197f9 100644 --- a/regression-test/suites/inverted_index_p0/index_change/test_index_change_3.groovy +++ b/regression-test/suites/inverted_index_p0/index_change/test_index_change_3.groovy @@ -22,6 +22,22 @@ suite("test_index_change_3") { def delta_time = 1000 def alter_res = "null" def useTime = 0 + + def wait_for_latest_op_on_table_finish = { table_name, OpTimeout -> + for(int t = delta_time; t <= OpTimeout; t += delta_time){ + alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${table_name}" ORDER BY CreateTime DESC LIMIT 1;""" + alter_res = alter_res.toString() + if(alter_res.contains("FINISHED")) { + sleep(3000) // wait change table state to normal + logger.info(table_name + " latest alter job finished, detail: " + alter_res) + break + } + useTime = t + sleep(delta_time) + } + assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout") + } + def wait_for_build_index_on_partition_finish = { table_name, OpTimeout -> for(int t = delta_time; t <= OpTimeout; t += delta_time){ alter_res = sql """SHOW BUILD INDEX WHERE TableName = "${table_name}";""" @@ -94,6 +110,7 @@ suite("test_index_change_3") { // create inverted index idx_city sql """ CREATE INDEX idx_city ON ${tableName}(`city`) USING INVERTED PROPERTIES("parser"="english") """ + wait_for_latest_op_on_table_finish(tableName, timeout) // build index sql """ BUILD INDEX idx_city ON ${tableName} """ diff --git a/regression-test/suites/inverted_index_p0/index_change/test_index_change_4.groovy b/regression-test/suites/inverted_index_p0/index_change/test_index_change_4.groovy index 6c0dbe463f..1c19420be0 100644 --- a/regression-test/suites/inverted_index_p0/index_change/test_index_change_4.groovy +++ b/regression-test/suites/inverted_index_p0/index_change/test_index_change_4.groovy @@ -22,6 +22,22 @@ suite("test_index_change_4") { def delta_time = 1000 def alter_res = "null" def useTime = 0 + + def wait_for_latest_op_on_table_finish = { table_name, OpTimeout -> + for(int t = delta_time; t <= OpTimeout; t += delta_time){ + alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${table_name}" ORDER BY CreateTime DESC LIMIT 1;""" + alter_res = alter_res.toString() + if(alter_res.contains("FINISHED")) { + sleep(3000) // wait change table state to normal + logger.info(table_name + " latest alter job finished, detail: " + alter_res) + break + } + useTime = t + sleep(delta_time) + } + assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout") + } + def wait_for_build_index_on_partition_finish = { table_name, OpTimeout -> for(int t = delta_time; t <= OpTimeout; t += delta_time){ alter_res = sql """SHOW BUILD INDEX WHERE TableName = "${table_name}";""" @@ -97,6 +113,7 @@ suite("test_index_change_4") { sql """ DROP INDEX idx_note ON ${tableName} """ // create inverted index idx_city sql """ CREATE INDEX idx_note ON ${tableName}(`note`) USING INVERTED PROPERTIES("parser"="english") """ + wait_for_latest_op_on_table_finish(tableName, timeout) // build index sql """ BUILD INDEX idx_note ON ${tableName} """ wait_for_build_index_on_partition_finish(tableName, timeout) diff --git a/regression-test/suites/inverted_index_p0/index_change/test_index_change_6.groovy b/regression-test/suites/inverted_index_p0/index_change/test_index_change_6.groovy index 45c68bd7ce..9a04ebbb47 100644 --- a/regression-test/suites/inverted_index_p0/index_change/test_index_change_6.groovy +++ b/regression-test/suites/inverted_index_p0/index_change/test_index_change_6.groovy @@ -22,6 +22,22 @@ suite("test_index_change_6") { def delta_time = 1000 def alter_res = "null" def useTime = 0 + + def wait_for_latest_op_on_table_finish = { table_name, OpTimeout -> + for(int t = delta_time; t <= OpTimeout; t += delta_time){ + alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${table_name}" ORDER BY CreateTime DESC LIMIT 1;""" + alter_res = alter_res.toString() + if(alter_res.contains("FINISHED")) { + sleep(3000) // wait change table state to normal + logger.info(table_name + " latest alter job finished, detail: " + alter_res) + break + } + useTime = t + sleep(delta_time) + } + assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout") + } + def wait_for_build_index_on_partition_finish = { table_name, OpTimeout -> for(int t = delta_time; t <= OpTimeout; t += delta_time){ alter_res = sql """SHOW BUILD INDEX WHERE TableName = "${table_name}";""" @@ -100,6 +116,8 @@ suite("test_index_change_6") { sql """ CREATE INDEX idx_user_id ON ${tableName}(`user_id`) USING INVERTED """ sql """ CREATE INDEX idx_note ON ${tableName}(`note`) USING INVERTED PROPERTIES("parser" = "english") """ + wait_for_latest_op_on_table_finish(tableName, timeout) + // build inverted index sql """ BUILD INDEX idx_user_id ON ${tableName} """ sql """ BUILD INDEX idx_note ON ${tableName} """ diff --git a/regression-test/suites/inverted_index_p0/index_change/test_index_change_7.groovy b/regression-test/suites/inverted_index_p0/index_change/test_index_change_7.groovy index b1cbe7080b..6c08392b4d 100644 --- a/regression-test/suites/inverted_index_p0/index_change/test_index_change_7.groovy +++ b/regression-test/suites/inverted_index_p0/index_change/test_index_change_7.groovy @@ -22,6 +22,22 @@ suite("test_index_change_7") { def delta_time = 1000 def alter_res = "null" def useTime = 0 + + def wait_for_latest_op_on_table_finish = { table_name, OpTimeout -> + for(int t = delta_time; t <= OpTimeout; t += delta_time){ + alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${table_name}" ORDER BY CreateTime DESC LIMIT 1;""" + alter_res = alter_res.toString() + if(alter_res.contains("FINISHED")) { + sleep(3000) // wait change table state to normal + logger.info(table_name + " latest alter job finished, detail: " + alter_res) + break + } + useTime = t + sleep(delta_time) + } + assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout") + } + def wait_for_build_index_on_partition_finish = { table_name, OpTimeout -> for(int t = delta_time; t <= OpTimeout; t += delta_time){ alter_res = sql """SHOW BUILD INDEX WHERE TableName = "${table_name}";""" @@ -90,6 +106,8 @@ suite("test_index_change_7") { sql """ CREATE INDEX c_array_idx ON ${tableName}(`c_array`) USING INVERTED PROPERTIES("parser"="english") """ sql """ CREATE INDEX int_array_idx ON ${tableName}(`int_array`) USING INVERTED """ + wait_for_latest_op_on_table_finish(tableName, timeout) + // build inverted index sql """ BUILD INDEX c_array_idx ON ${tableName} """ sql """ BUILD INDEX int_array_idx ON ${tableName} """ diff --git a/regression-test/suites/inverted_index_p0/index_change/test_index_change_with_compaction.groovy b/regression-test/suites/inverted_index_p0/index_change/test_index_change_with_compaction.groovy index c37f9aa0cd..b4a42aba23 100644 --- a/regression-test/suites/inverted_index_p0/index_change/test_index_change_with_compaction.groovy +++ b/regression-test/suites/inverted_index_p0/index_change/test_index_change_with_compaction.groovy @@ -20,6 +20,26 @@ import org.codehaus.groovy.runtime.IOGroovyMethods suite("test_index_change_with_compaction") { def tableName = "index_change_with_compaction_dup_keys" + def timeout = 60000 + def delta_time = 1000 + def alter_res = "null" + def useTime = 0 + + def wait_for_latest_op_on_table_finish = { table_name, OpTimeout -> + for(int t = delta_time; t <= OpTimeout; t += delta_time){ + alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${table_name}" ORDER BY CreateTime DESC LIMIT 1;""" + alter_res = alter_res.toString() + if(alter_res.contains("FINISHED")) { + sleep(3000) // wait change table state to normal + logger.info(table_name + " latest alter job finished, detail: " + alter_res) + break + } + useTime = t + sleep(delta_time) + } + assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout") + } + try { //BackendId,Cluster,IP,HeartbeatPort,BePort,HttpPort,BrpcPort,LastStartTime,LastHeartbeat,Alive,SystemDecommissioned,ClusterDecommissioned,TabletNum,DataUsedCapacity,AvailCapacity,TotalCapacity,UsedPct,MaxDiskUsedPct,Tag,ErrMsg,Version,Status String[][] backends = sql """ show backends; """ @@ -119,6 +139,8 @@ suite("test_index_change_with_compaction") { sql """ CREATE INDEX idx_date ON ${tableName}(`date`) USING INVERTED """ sql """ CREATE INDEX idx_city ON ${tableName}(`city`) USING INVERTED """ + wait_for_latest_op_on_table_finish(tableName, timeout) + // trigger compactions for all tablets in ${tableName} for (String[] tablet in tablets) { String tablet_id = tablet[0] diff --git a/regression-test/suites/inverted_index_p0/index_change/test_pk_uk_index_change.groovy b/regression-test/suites/inverted_index_p0/index_change/test_pk_uk_index_change.groovy index b74d45c5f3..7bccbc9f2c 100644 --- a/regression-test/suites/inverted_index_p0/index_change/test_pk_uk_index_change.groovy +++ b/regression-test/suites/inverted_index_p0/index_change/test_pk_uk_index_change.groovy @@ -31,6 +31,22 @@ suite("test_pk_uk_index_change", "inverted_index") { def delta_time = 1000 def alter_res = "null" def useTime = 0 + + def wait_for_latest_op_on_table_finish = { table_name, OpTimeout -> + for(int t = delta_time; t <= OpTimeout; t += delta_time){ + alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${table_name}" ORDER BY CreateTime DESC LIMIT 1;""" + alter_res = alter_res.toString() + if(alter_res.contains("FINISHED")) { + sleep(3000) // wait change table state to normal + logger.info(table_name + " latest alter job finished, detail: " + alter_res) + break + } + useTime = t + sleep(delta_time) + } + assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout") + } + def wait_for_build_index_on_partition_finish = { table_name, OpTimeout -> for(int t = delta_time; t <= OpTimeout; t += delta_time){ alter_res = sql """SHOW BUILD INDEX WHERE TableName = "${table_name}";""" @@ -222,6 +238,9 @@ suite("test_pk_uk_index_change", "inverted_index") { sql """ ALTER TABLE ${tableNamePk} ADD INDEX L_ORDERKEY_idx (L_ORDERKEY) USING INVERTED COMMENT 'L_ORDERKEY index'; """ + + wait_for_latest_op_on_table_finish(tableNamePk, timeout) + // build inverted index sql """ BUILD INDEX L_ORDERKEY_idx ON ${tableNamePk}; """ wait_for_build_index_on_partition_finish(tableNamePk, timeout) @@ -302,3 +321,4 @@ suite("test_pk_uk_index_change", "inverted_index") { wait_for_build_index_on_partition_finish(tableNamePk, timeout) } } + diff --git a/regression-test/suites/inverted_index_p0/test_build_index.groovy b/regression-test/suites/inverted_index_p0/test_build_index.groovy index d7b63b8d09..87250c2897 100644 --- a/regression-test/suites/inverted_index_p0/test_build_index.groovy +++ b/regression-test/suites/inverted_index_p0/test_build_index.groovy @@ -157,6 +157,8 @@ suite("test_build_index", "inverted_index"){ // ADD INDEX sql """ ALTER TABLE ${tableName} ADD INDEX idx_comment (`comment`) USING INVERTED PROPERTIES("parser" = "english") """ + wait_for_latest_op_on_table_finish(tableName, timeout) + // BUILD INDEX and expect state is RUNNING sql """ BUILD INDEX idx_comment ON ${tableName} """ def state = wait_for_last_build_index_on_table_running(tableName, timeout)