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
The following commit(s) were added to refs/heads/branch-2.1 by this push: new ffbb10200fe [test](mtmv)Verifying master-slave consistency after schema change (#51106) ffbb10200fe is described below commit ffbb10200fec21c5764a4183e346a4889b275823 Author: zfr95 <zhangfur...@selectdb.com> AuthorDate: Thu May 22 14:29:12 2025 +0800 [test](mtmv)Verifying master-slave consistency after schema change (#51106) --- .../mtmv_p0/test_base_replace_on_commit_mtmv.out | Bin 342 -> 349 bytes .../org/apache/doris/regression/suite/Suite.groovy | 35 +++++++++ .../test_base_add_col_multi_level_mtmv.groovy | 30 +++++--- ..._base_alter_col_comment_multi_level_mtmv.groovy | 24 ++++-- ...est_base_alter_col_type_multi_level_mtmv.groovy | 23 ++++-- .../test_base_comment_multi_level_mtmv.groovy | 23 ++++-- .../test_base_drop_col_multi_level_mtmv.groovy | 25 +++--- .../mtmv_p0/test_base_drop_multi_level_mtmv.groovy | 30 ++++++-- .../test_base_recreate_on_commit_mtmv.groovy | 30 +++++++- .../test_base_rename_col_multi_level_mtmv.groovy | 24 ++++-- .../test_base_rename_multi_level_mtmv.groovy | 24 ++++-- .../test_base_rename_mv_multi_level_mtmv.groovy | 36 ++++++--- .../mtmv_p0/test_base_rename_on_commit_mtmv.groovy | 55 +++++++++++--- .../test_base_rename_p_mv_multi_level_mtmv.groovy | 26 ++++--- .../test_base_replace_multi_level_mtmv.groovy | 63 +++++++++++----- .../test_base_replace_mv_multi_level_mtmv.groovy | 84 +++++++++++++++------ .../test_base_replace_on_commit_mtmv.groovy | 45 +++++++++-- .../suites/mtmv_p0/test_column_type_mtmv.groovy | 30 +++++++- .../suites/mtmv_p0/test_recreate_table_mtmv.groovy | 37 ++++++++- 19 files changed, 488 insertions(+), 156 deletions(-) diff --git a/regression-test/data/mtmv_p0/test_base_replace_on_commit_mtmv.out b/regression-test/data/mtmv_p0/test_base_replace_on_commit_mtmv.out index e5bb84bf378..cccc66dff4e 100644 Binary files a/regression-test/data/mtmv_p0/test_base_replace_on_commit_mtmv.out and b/regression-test/data/mtmv_p0/test_base_replace_on_commit_mtmv.out differ diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy index fa6e9de148c..cce8d4e524c 100644 --- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy +++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy @@ -1414,6 +1414,41 @@ class Suite implements GroovyInterceptable { return debugPoint } + // get follower ip + def get_follower_ip = { + def result = sql """show frontends;""" + if (result.size() == 1) { + return null + } + for (int i = 0; i < result.size(); i++) { + if (result[i][7] == "FOLLOWER" && result[i][8] == "false" && result[i][11] == "true") { + return result[i][1] + } + } + return null + } + + // get master ip + def get_master_ip = { + def result = sql """show frontends;""" + for (int i = 0; i < result.size(); i++) { + if (result[i][7] == "FOLLOWER" && result[i][8] == "true" && result[i][11] == "true") { + return result[i][1] + } + } + return null + } + + def run_on_follower_and_master = { test_fn -> + for (def ip in [get_follower_ip(), get_master_ip()]) { + if (ip != null) { + def jdbc_url = context.config.jdbcUrl.replaceAll(/\/\/[0-9.]+:/, "//${ip}:") + logger.info("jdbc_url: " + jdbc_url) + test_fn(jdbc_url) + } + } + } + def waitingMTMVTaskFinishedByMvName = { mvName, dbName = context.dbName -> Thread.sleep(2000); String showTasks = "select TaskId,JobId,JobName,MvId,Status,MvName,MvDatabaseName,ErrorMsg from tasks('type'='mv') where MvDatabaseName = '${dbName}' and MvName = '${mvName}' order by CreateTime ASC" diff --git a/regression-test/suites/mtmv_p0/test_base_add_col_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_add_col_multi_level_mtmv.groovy index 1d079661968..21fdca199cd 100644 --- a/regression-test/suites/mtmv_p0/test_base_add_col_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_add_col_multi_level_mtmv.groovy @@ -127,14 +127,26 @@ suite("test_base_add_col_multi_level_mtmv","mtmv") { sql """ alter table ${tableName1} add COLUMN new_col INT AFTER k2; """ - assertEquals("FINISHED", getAlterColumnFinalState("${tableName1}")) - order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_rewrite_success_without_check_chosen(querySql, mvName1) - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_rewrite_success_without_check_chosen(querySql, mvName3) - mv_rewrite_success_without_check_chosen(querySql, mvName4) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + + assertEquals("FINISHED", getAlterColumnFinalState("${tableName1}")) + + order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + + mv_rewrite_success_without_check_chosen(querySql, mvName1) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_rewrite_success_without_check_chosen(querySql, mvName3) + mv_rewrite_success_without_check_chosen(querySql, mvName4) + } + }) + + } diff --git a/regression-test/suites/mtmv_p0/test_base_alter_col_comment_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_alter_col_comment_multi_level_mtmv.groovy index 6bb2eba17ad..690bd1a317a 100644 --- a/regression-test/suites/mtmv_p0/test_base_alter_col_comment_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_alter_col_comment_multi_level_mtmv.groovy @@ -128,13 +128,21 @@ suite("test_base_alter_col_comment_multi_level_mtmv","mtmv") { sql """ alter table ${tableName1} modify COLUMN k3 COMMENT 'new comment'; """ - order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_rewrite_success_without_check_chosen(querySql, mvName1) - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_rewrite_success_without_check_chosen(querySql, mvName3) - mv_rewrite_success_without_check_chosen(querySql, mvName4) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + + mv_rewrite_success_without_check_chosen(querySql, mvName1) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_rewrite_success_without_check_chosen(querySql, mvName3) + mv_rewrite_success_without_check_chosen(querySql, mvName4) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_alter_col_type_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_alter_col_type_multi_level_mtmv.groovy index 83abd73dde5..0bd4d645edd 100644 --- a/regression-test/suites/mtmv_p0/test_base_alter_col_type_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_alter_col_type_multi_level_mtmv.groovy @@ -128,13 +128,20 @@ suite("test_base_alter_col_type_multi_level_mtmv","mtmv") { sql """ alter table ${tableName1} modify COLUMN k3 VARCHAR(100); """ - order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_not_part_in(querySql, mvName1) - mv_not_part_in(querySql, mvName3) - mv_not_part_in(querySql, mvName4) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_not_part_in(querySql, mvName1) + mv_not_part_in(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_comment_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_comment_multi_level_mtmv.groovy index 5636c7dbcb4..462f23c445f 100644 --- a/regression-test/suites/mtmv_p0/test_base_comment_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_comment_multi_level_mtmv.groovy @@ -127,13 +127,20 @@ suite("test_base_comment_multi_level_mtmv","mtmv") { sql """ alter table ${tableName1} MODIFY COMMENT "new table comment"; """ - order_qt_comment_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_comment_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_comment_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_comment_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_comment_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_comment_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_comment_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_comment_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_rewrite_success_without_check_chosen(querySql, mvName1) - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_rewrite_success_without_check_chosen(querySql, mvName3) - mv_rewrite_success_without_check_chosen(querySql, mvName4) + mv_rewrite_success_without_check_chosen(querySql, mvName1) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_rewrite_success_without_check_chosen(querySql, mvName3) + mv_rewrite_success_without_check_chosen(querySql, mvName4) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_drop_col_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_drop_col_multi_level_mtmv.groovy index 3f0b77e6073..8e65da0bbe9 100644 --- a/regression-test/suites/mtmv_p0/test_base_drop_col_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_drop_col_multi_level_mtmv.groovy @@ -128,14 +128,21 @@ suite("test_base_drop_col_multi_level_mtmv","mtmv") { sql """ alter table ${tableName1} drop COLUMN k3; """ - assertEquals("FINISHED", getAlterColumnFinalState("${tableName1}")) - order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + assertEquals("FINISHED", getAlterColumnFinalState("${tableName1}")) + order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_not_part_in(querySql, mvName1) - mv_not_part_in(querySql, mvName3) - mv_not_part_in(querySql, mvName4) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_not_part_in(querySql, mvName1) + mv_not_part_in(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_drop_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_drop_multi_level_mtmv.groovy index e81f1799ec5..d6a983ff061 100644 --- a/regression-test/suites/mtmv_p0/test_base_drop_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_drop_multi_level_mtmv.groovy @@ -125,10 +125,17 @@ suite("test_base_drop_multi_level_mtmv","mtmv") { // drop t1 sql """drop table if exists `${tableName1}`""" - order_qt_drop_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_drop_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_drop_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_drop_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_drop_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_drop_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_drop_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_drop_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + } + }) sql """ CREATE TABLE ${tableName1} @@ -145,8 +152,15 @@ suite("test_base_drop_multi_level_mtmv","mtmv") { INSERT INTO ${tableName1} VALUES(1,"a"); """ - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_not_part_in(querySql, mvName1) - mv_not_part_in(querySql, mvName3) - mv_not_part_in(querySql, mvName4) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_not_part_in(querySql, mvName1) + mv_not_part_in(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_recreate_on_commit_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_recreate_on_commit_mtmv.groovy index c2011952a52..adb707fc982 100644 --- a/regression-test/suites/mtmv_p0/test_base_recreate_on_commit_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_recreate_on_commit_mtmv.groovy @@ -58,11 +58,25 @@ suite("test_base_recreate_on_commit_mtmv","mtmv") { REFRESH MATERIALIZED VIEW ${mvName} auto """ waitingMTMVTaskFinishedByMvName(mvName) - order_qt_select_init "select * from ${mvName}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_select_init "select * from ${mvName}" + } + }) // drop and recreate sql """drop table if exists `${tableName1}`""" - order_qt_drop "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_drop "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + } + }) sql """ CREATE TABLE ${tableName1} @@ -81,6 +95,14 @@ suite("test_base_recreate_on_commit_mtmv","mtmv") { """ waitingMTMVTaskFinishedByMvName(mvName) - order_qt_recreate "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" - order_qt_select_recreate "select * from ${mvName}" + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_recreate "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + order_qt_select_recreate "select * from ${mvName}" + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_rename_col_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_rename_col_multi_level_mtmv.groovy index 2e803efa5d2..9a2c104490f 100644 --- a/regression-test/suites/mtmv_p0/test_base_rename_col_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_rename_col_multi_level_mtmv.groovy @@ -128,13 +128,21 @@ suite("test_base_rename_col_multi_level_mtmv","mtmv") { sql """ alter table ${tableName1} rename COLUMN k3 k4; """ - order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_not_part_in(querySql, mvName1) - mv_not_part_in(querySql, mvName3) - mv_not_part_in(querySql, mvName4) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_add_col_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_add_col_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_add_col_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_add_col_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_not_part_in(querySql, mvName1) + mv_not_part_in(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_rename_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_rename_multi_level_mtmv.groovy index 0f967ec096a..876e14dccb6 100644 --- a/regression-test/suites/mtmv_p0/test_base_rename_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_rename_multi_level_mtmv.groovy @@ -129,13 +129,21 @@ suite("test_base_rename_multi_level_mtmv","mtmv") { sql """ ALTER TABLE ${tableName1} rename ${tableName1Rename}; """ - order_qt_drop_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_drop_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_drop_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_drop_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_not_part_in(querySql, mvName1) - mv_not_part_in(querySql, mvName3) - mv_not_part_in(querySql, mvName4) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_drop_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_drop_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_drop_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_drop_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_not_part_in(querySql, mvName1) + mv_not_part_in(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_rename_mv_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_rename_mv_multi_level_mtmv.groovy index db95b0e412c..e4640f05290 100644 --- a/regression-test/suites/mtmv_p0/test_base_rename_mv_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_rename_mv_multi_level_mtmv.groovy @@ -129,20 +129,36 @@ suite("test_base_rename_mv_multi_level_mtmv","mtmv") { sql """ ALTER MATERIALIZED VIEW ${mvName1} rename ${mvName1Rename}; """ - order_qt_rename_mv_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1Rename}'" - order_qt_rename_mv_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_rename_mv_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_rename_mv_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - // rename table will rename default partition name, so will change to async - mv_not_part_in(querySql, mvName1Rename) - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_rewrite_success_without_check_chosen(querySql, mvName3) - mv_not_part_in(querySql, mvName4) + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_rename_mv_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1Rename}'" + order_qt_rename_mv_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_rename_mv_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_rename_mv_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + // rename table will rename default partition name, so will change to async + mv_not_part_in(querySql, mvName1Rename) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_rewrite_success_without_check_chosen(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + } + }) // after refresh,should can rewrite sql """ REFRESH MATERIALIZED VIEW ${mvName1Rename} auto """ waitingMTMVTaskFinishedByMvName(mvName1Rename) - mv_rewrite_success_without_check_chosen(querySql, mvName1Rename) + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + mv_rewrite_success_without_check_chosen(querySql, mvName1Rename) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_rename_on_commit_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_rename_on_commit_mtmv.groovy index 02aca18c0f3..4b72ebf92a7 100644 --- a/regression-test/suites/mtmv_p0/test_base_rename_on_commit_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_rename_on_commit_mtmv.groovy @@ -58,13 +58,27 @@ suite("test_base_rename_on_commit_mtmv","mtmv") { REFRESH MATERIALIZED VIEW ${mvName} auto """ waitingMTMVTaskFinishedByMvName(mvName) - order_qt_select_init "select * from ${mvName}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_select_init "select * from ${mvName}" + } + }) // rename and recreate sql """ ALTER TABLE ${tableName1} rename ${tableName2}; """ - order_qt_rename "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_rename "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + } + }) sql """ INSERT INTO ${tableName2} VALUES(2,2); @@ -72,8 +86,15 @@ suite("test_base_rename_on_commit_mtmv","mtmv") { // after rename, should not refresh auto waitingMTMVTaskFinishedByMvName(mvName) - order_qt_rename "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" - order_qt_select_rename "select * from ${mvName}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_rename "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + order_qt_select_rename "select * from ${mvName}" + } + }) // create t1 sql """ @@ -92,14 +113,30 @@ suite("test_base_rename_on_commit_mtmv","mtmv") { """ waitingMTMVTaskFinishedByMvName(mvName) - order_qt_recreate_auto "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" - order_qt_select_recreate_auto "select * from ${mvName}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_recreate_auto "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + order_qt_select_recreate_auto "select * from ${mvName}" + + // t2 should not trigger refresh + order_qt_before_trigger "select count(*) from tasks('type'='mv') where MvName='${mvName}'" + } + }) - // t2 should not trigger refresh - order_qt_before_trigger "select count(*) from tasks('type'='mv') where MvName='${mvName}'" sql """ INSERT INTO ${tableName2} VALUES(4,4); """ waitingMTMVTaskFinishedByMvName(mvName) - order_qt_after_trigger "select count(*) from tasks('type'='mv') where MvName='${mvName}'" + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_after_trigger "select count(*) from tasks('type'='mv') where MvName='${mvName}'" + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_rename_p_mv_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_rename_p_mv_multi_level_mtmv.groovy index e7ba67650f9..f3a66e5704a 100644 --- a/regression-test/suites/mtmv_p0/test_base_rename_p_mv_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_rename_p_mv_multi_level_mtmv.groovy @@ -142,13 +142,21 @@ suite("test_base_rename_p_mv_multi_level_mtmv","mtmv") { sql """ ALTER MATERIALIZED VIEW ${mvName1} rename ${mvName1Rename}; """ - order_qt_rename_mv_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1Rename}'" - order_qt_rename_mv_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_rename_mv_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_rename_mv_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_rewrite_success_without_check_chosen(querySql, mvName1Rename) - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_rewrite_success_without_check_chosen(querySql, mvName3) - mv_not_part_in(querySql, mvName4) - mv_not_part_in(querySql, mvName1) + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_rename_mv_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1Rename}'" + order_qt_rename_mv_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_rename_mv_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_rename_mv_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + mv_rewrite_success_without_check_chosen(querySql, mvName1Rename) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_rewrite_success_without_check_chosen(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + mv_not_part_in(querySql, mvName1) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_replace_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_replace_multi_level_mtmv.groovy index d572a818a9b..a3d791e5337 100644 --- a/regression-test/suites/mtmv_p0/test_base_replace_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_replace_multi_level_mtmv.groovy @@ -127,15 +127,23 @@ suite("test_base_replace_multi_level_mtmv","mtmv") { sql """ ALTER TABLE ${tableName1} REPLACE WITH TABLE ${tableName2} PROPERTIES('swap' = 'true'); """ - order_qt_replace_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_replace_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_replace_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_replace_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_not_part_in(querySql, mvName2) - mv_not_part_in(querySql, mvName1) - mv_not_part_in(querySql, mvName3) - mv_not_part_in(querySql, mvName4) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_replace_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_replace_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_replace_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_replace_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + + mv_not_part_in(querySql, mvName2) + mv_not_part_in(querySql, mvName1) + mv_not_part_in(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + } + }) sql """ REFRESH MATERIALIZED VIEW ${mvName1} auto @@ -157,24 +165,39 @@ suite("test_base_replace_multi_level_mtmv","mtmv") { """ waitingMTMVTaskFinishedByMvName(mvName4) - order_qt_refresh_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_refresh_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_refresh_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_refresh_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_refresh_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_refresh_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_refresh_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_refresh_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - mv_rewrite_success_without_check_chosen(querySql, mvName1) - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_rewrite_success_without_check_chosen(querySql, mvName3) - mv_rewrite_success_without_check_chosen(querySql, mvName4) + mv_rewrite_success_without_check_chosen(querySql, mvName1) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_rewrite_success_without_check_chosen(querySql, mvName3) + mv_rewrite_success_without_check_chosen(querySql, mvName4) + } + }) // replace t1 swap false sql """ ALTER TABLE ${tableName1} REPLACE WITH TABLE ${tableName2} PROPERTIES('swap' = 'false'); """ - order_qt_replace_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_replace_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_replace_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_replace_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_replace_t1_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_replace_t1_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_replace_t1_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_replace_t1_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_replace_mv_multi_level_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_replace_mv_multi_level_mtmv.groovy index 410f28afd02..4602673975c 100644 --- a/regression-test/suites/mtmv_p0/test_base_replace_mv_multi_level_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_replace_mv_multi_level_mtmv.groovy @@ -144,51 +144,87 @@ suite("test_base_replace_mv_multi_level_mtmv","mtmv") { sql """ ALTER MATERIALIZED VIEW ${mvName1} REPLACE WITH MATERIALIZED VIEW ${mvName11} PROPERTIES('swap' = 'true');; """ - order_qt_replace_true_mv_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_replace_true_mv_mv11 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName11}'" - order_qt_replace_true_mv_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_replace_true_mv_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_replace_true_mv_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - // replace table will rename default partition name, so will change to async - mv_not_part_in(querySql, mvName1) - mv_not_part_in(querySql, mvName11) - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_rewrite_success_without_check_chosen(querySql, mvName3) - mv_not_part_in(querySql, mvName4) + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_replace_true_mv_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_replace_true_mv_mv11 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName11}'" + order_qt_replace_true_mv_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_replace_true_mv_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_replace_true_mv_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + // replace table will rename default partition name, so will change to async + mv_not_part_in(querySql, mvName1) + mv_not_part_in(querySql, mvName11) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_rewrite_success_without_check_chosen(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + } + }) // after refresh,should can rewrite sql """ REFRESH MATERIALIZED VIEW ${mvName1} auto """ waitingMTMVTaskFinishedByMvName(mvName1) - mv_rewrite_success_without_check_chosen(querySql, mvName1) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + mv_rewrite_success_without_check_chosen(querySql, mvName1) + } + }) // after refresh,should can rewrite sql """ REFRESH MATERIALIZED VIEW ${mvName11} auto """ waitingMTMVTaskFinishedByMvName(mvName11) - mv_rewrite_success_without_check_chosen(querySql, mvName11) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + mv_rewrite_success_without_check_chosen(querySql, mvName11) + } + }) // replace mv1 sql """ ALTER MATERIALIZED VIEW ${mvName1} REPLACE WITH MATERIALIZED VIEW ${mvName11} PROPERTIES('swap' = 'false');; """ - order_qt_replace_false_mv_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" - order_qt_replace_false_mv_mv11 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName11}'" - order_qt_replace_false_mv_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" - order_qt_replace_false_mv_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" - order_qt_replace_false_mv_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" - // replace table will rename default partition name, so will change to async - mv_not_part_in(querySql, mvName1) - mv_rewrite_success_without_check_chosen(querySql, mvName2) - mv_rewrite_success_without_check_chosen(querySql, mvName3) - mv_not_part_in(querySql, mvName4) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_replace_false_mv_mv1 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName1}'" + order_qt_replace_false_mv_mv11 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName11}'" + order_qt_replace_false_mv_mv2 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName2}'" + order_qt_replace_false_mv_mv3 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName3}'" + order_qt_replace_false_mv_mv4 "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName4}'" + // replace table will rename default partition name, so will change to async + mv_not_part_in(querySql, mvName1) + mv_rewrite_success_without_check_chosen(querySql, mvName2) + mv_rewrite_success_without_check_chosen(querySql, mvName3) + mv_not_part_in(querySql, mvName4) + } + }) // after refresh,should can rewrite sql """ REFRESH MATERIALIZED VIEW ${mvName1} auto """ waitingMTMVTaskFinishedByMvName(mvName1) - mv_rewrite_success_without_check_chosen(querySql, mvName1) + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + mv_rewrite_success_without_check_chosen(querySql, mvName1) + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_base_replace_on_commit_mtmv.groovy b/regression-test/suites/mtmv_p0/test_base_replace_on_commit_mtmv.groovy index 8e8c3f599b2..5d8a4f3eb3d 100644 --- a/regression-test/suites/mtmv_p0/test_base_replace_on_commit_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_base_replace_on_commit_mtmv.groovy @@ -74,27 +74,58 @@ suite("test_base_replace_on_commit_mtmv","mtmv") { REFRESH MATERIALIZED VIEW ${mvName} auto """ waitingMTMVTaskFinishedByMvName(mvName) - order_qt_select_init "select * from ${mvName}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_select_init "select * from ${mvName}" + } + }) // replace sql """ ALTER TABLE ${tableName1} REPLACE WITH TABLE ${tableName2} PROPERTIES('swap' = 'true'); """ - order_qt_replace "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_replace "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + } + }) sql """ INSERT INTO ${tableName1} VALUES(2,2); """ waitingMTMVTaskFinishedByMvName(mvName) - order_qt_replace "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" - order_qt_select_replace "select * from ${mvName}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_replace_normal "select Name,State,RefreshState from mv_infos('database'='${dbName}') where Name='${mvName}'" + order_qt_select_replace "select * from ${mvName}" - // t2 should not trigger refresh - order_qt_before_trigger "select count(*) from tasks('type'='mv') where MvName='${mvName}'" + + // t2 should not trigger refresh + order_qt_before_trigger "select count(*) from tasks('type'='mv') where MvName='${mvName}'" + + } + }) sql """ INSERT INTO ${tableName2} VALUES(20,20); """ waitingMTMVTaskFinishedByMvName(mvName) - order_qt_after_trigger "select count(*) from tasks('type'='mv') where MvName='${mvName}'" + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_after_trigger "select count(*) from tasks('type'='mv') where MvName='${mvName}'" + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_column_type_mtmv.groovy b/regression-test/suites/mtmv_p0/test_column_type_mtmv.groovy index fdf03ad19da..867623f0acb 100644 --- a/regression-test/suites/mtmv_p0/test_column_type_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_column_type_mtmv.groovy @@ -18,6 +18,7 @@ import org.junit.Assert; suite("test_column_type_mtmv","mtmv") { + String dbName = context.config.getDbNameByFile(context.file) String suiteName = "test_column_type_mtmv" String tableName = "${suiteName}_table" String mvName = "${suiteName}_mv" @@ -47,15 +48,38 @@ suite("test_column_type_mtmv","mtmv") { """ waitingMTMVTaskFinishedByMvName(mvName) - order_qt_normal "select Name,State,RefreshState from mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'" + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_normal "select Name,State,RefreshState from mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'" + } + }) sql """alter table ${tableName} modify column class_id bigint;""" assertEquals("FINISHED", getAlterColumnFinalState("${tableName}")) - order_qt_after_schema_change "select Name,State,RefreshState from mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'" + + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_after_schema_change "select Name,State,RefreshState from mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'" + } + }) sql """ REFRESH MATERIALIZED VIEW ${mvName} auto; """ def jobName = getJobName("regression_test_mtmv_p0", mvName); waitingMTMVTaskFinishedNotNeedSuccess(jobName) // can not be rewrite - order_qt_after_refresh "select Name,State,RefreshState from mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_after_refresh "select Name,State,RefreshState from mv_infos('database'='regression_test_mtmv_p0') where Name='${mvName}'" + } + }) } diff --git a/regression-test/suites/mtmv_p0/test_recreate_table_mtmv.groovy b/regression-test/suites/mtmv_p0/test_recreate_table_mtmv.groovy index ffae7398e3a..7ff44e27850 100644 --- a/regression-test/suites/mtmv_p0/test_recreate_table_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_recreate_table_mtmv.groovy @@ -18,6 +18,7 @@ import org.junit.Assert; suite("test_recreate_table_mtmv","mtmv") { + String dbName = context.config.getDbNameByFile(context.file) String suiteName = "test_recreate_table_mtmv" String tableName1 = "${suiteName}_table1" String tableName2 = "${suiteName}_table2" @@ -63,7 +64,14 @@ suite("test_recreate_table_mtmv","mtmv") { ) AS (SELECT * FROM ${tableName1} ); """ waitingMTMVTaskFinishedByMvName(mvName1); - order_qt_mv1 "SELECT * FROM ${mvName1}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_mv1 "SELECT * FROM ${mvName1}" + } + }) sql """ CREATE MATERIALIZED VIEW IF NOT EXISTS ${mvName2} BUILD IMMEDIATE REFRESH AUTO ON COMMIT DISTRIBUTED BY RANDOM BUCKETS 2 PROPERTIES ( @@ -71,7 +79,14 @@ suite("test_recreate_table_mtmv","mtmv") { ) AS (SELECT first_name,count(last_name) FROM ${mvName1} GROUP BY first_name); """ waitingMTMVTaskFinishedByMvName(mvName2); - order_qt_mv2 "SELECT * FROM ${mvName2}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_mv2 "SELECT * FROM ${mvName2}" + } + }) sql """drop materialized view if exists ${mvName1};""" sql """ CREATE MATERIALIZED VIEW IF NOT EXISTS ${mvName1} BUILD IMMEDIATE REFRESH AUTO ON COMMIT DISTRIBUTED BY RANDOM BUCKETS 2 @@ -80,12 +95,26 @@ suite("test_recreate_table_mtmv","mtmv") { ) AS (SELECT * FROM ${tableName2} ); """ waitingMTMVTaskFinishedByMvName(mvName1); - order_qt_mv1_recreate "SELECT * FROM ${mvName1}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_mv1_recreate "SELECT * FROM ${mvName1}" + } + }) sql """ REFRESH MATERIALIZED VIEW ${mvName2} auto """ waitingMTMVTaskFinishedByMvName(mvName2); - order_qt_mv2_recreate "SELECT * FROM ${mvName2}" + run_on_follower_and_master({ jdbc_url -> + connect(context.config.jdbcUser, context.config.jdbcPassword, jdbc_url) { + sql "sync" + sql """set enable_materialized_view_nest_rewrite = true;""" + sql "use ${dbName}" + order_qt_mv2_recreate "SELECT * FROM ${mvName2}" + } + }) sql """drop table if exists `${tableName1}`""" sql """drop table if exists `${tableName2}`""" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org