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 ed8531b99ad branch-2.1: [feat](regression) inject debug points need run in nonConcurrent or docker suites #49581 (#49618) ed8531b99ad is described below commit ed8531b99ade11ef612e2bae16e926687c5637c7 Author: yujun <yu...@selectdb.com> AuthorDate: Sun Mar 30 15:43:58 2025 +0800 branch-2.1: [feat](regression) inject debug points need run in nonConcurrent or docker suites #49581 (#49618) Cherry-picked from #49581, #40259 --- .../org/apache/doris/regression/Config.groovy | 7 ++ .../apache/doris/regression/ConfigOptions.groovy | 10 +++ .../apache/doris/regression/RegressionTest.groovy | 83 +++++++++++++++------- .../org/apache/doris/regression/suite/Suite.groovy | 13 ++++ .../backup_restore/test_backup_cancelled.groovy | 45 ++++++------ .../test_backup_restore_atomic_with_alter.groovy | 6 +- .../clone_p0/test_clone_no_missing_version.groovy | 2 +- .../suites/clone_p0/test_decommission_mtmv.groovy | 2 +- .../test_drop_clone_tablet_path_race.groovy | 5 +- .../test_compaction_with_visible_version.groovy | 2 +- .../suites/demo_p0/debugpoint_action.groovy | 26 +++++++ .../suites/demo_p0/docker_action.groovy | 2 +- .../test_partial_update_during_sc.groovy | 2 +- .../group_commit/replay_wal_restart_fe.groovy | 2 +- .../test_build_index_with_clone_by_docker.groovy | 5 +- .../test_min_load_replica_num_complicate.groovy | 2 +- .../load/insert/test_publish_one_succ.groovy | 2 +- .../insert/test_min_load_replica_num_simple.groovy | 2 +- .../stream_load/test_coordidator_be_restart.groovy | 2 +- .../test_migrate_disk_with_publish_version.groovy | 5 +- .../test_create_table_exception.groovy | 2 +- .../test_partition_create_tablet_rr.groovy | 2 +- .../test_inject_send_filter_size_fail.groovy | 2 +- .../join/test_slow_close/test_slow_close.groovy | 2 +- .../suites/query_p0/test_forward_qeury.groovy | 4 +- .../test_schema_change_concurrent_with_txn.groovy | 2 +- .../test_partition_default_medium.groovy | 2 +- .../test_storage_medium_has_disk.groovy | 6 +- regression-test/suites/trash_p0/clean_trash.groovy | 7 +- .../test_partial_update_conflict_be_restart.groovy | 2 +- .../test_mow_full_clone_exception.groovy | 2 +- run-regression-test.sh | 1 + 32 files changed, 183 insertions(+), 76 deletions(-) diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy index c1395b6d4c0..acd7076ab1b 100644 --- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy +++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/Config.groovy @@ -108,6 +108,7 @@ class Config { public InetSocketAddress metaServiceHttpInetSocketAddress public Integer parallel public Integer suiteParallel + public Integer dockerSuiteParallel public Integer actionParallel public Integer times public boolean withOutLoadData @@ -279,6 +280,7 @@ class Config { config.forceGenerateOutputFile = cmd.hasOption(forceGenOutOpt) config.parallel = Integer.parseInt(cmd.getOptionValue(parallelOpt, "10")) config.suiteParallel = Integer.parseInt(cmd.getOptionValue(suiteParallelOpt, "10")) + config.dockerSuiteParallel = Integer.parseInt(cmd.getOptionValue(dockerSuiteParallelOpt, "1")) config.actionParallel = Integer.parseInt(cmd.getOptionValue(actionParallelOpt, "10")) config.times = Integer.parseInt(cmd.getOptionValue(timesOpt, "1")) config.randomOrder = cmd.hasOption(randomOrderOpt) @@ -606,6 +608,11 @@ class Config { log.info("Set suiteParallel to 1 because not specify.".toString()) } + if (config.dockerSuiteParallel == null) { + config.dockerSuiteParallel = 1 + log.info("Set dockerSuiteParallel to 1 because not specify.".toString()) + } + if (config.actionParallel == null) { config.actionParallel = 10 log.info("Set actionParallel to 10 because not specify.".toString()) diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/ConfigOptions.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/ConfigOptions.groovy index 69b21457d2f..2269e3690f4 100644 --- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/ConfigOptions.groovy +++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/ConfigOptions.groovy @@ -61,6 +61,7 @@ class ConfigOptions { static Option forceGenOutOpt static Option parallelOpt static Option suiteParallelOpt + static Option dockerSuiteParallelOpt static Option actionParallelOpt static Option randomOrderOpt static Option stopWhenFailOpt @@ -352,6 +353,14 @@ class ConfigOptions { .longOpt("suiteParallel") .desc("the num of threads running for suites") .build() + dockerSuiteParallelOpt = Option.builder("dockerSuiteParallel") + .argName("dockerSuiteParallel") + .required(false) + .hasArg(true) + .type(String.class) + .longOpt("dockerSuiteParallel") + .desc("the num of threads running for docker suites") + .build() actionParallelOpt = Option.builder("actionParallel") .argName("parallel") .required(false) @@ -435,6 +444,7 @@ class ConfigOptions { .addOption(forceGenOutOpt) .addOption(parallelOpt) .addOption(suiteParallelOpt) + .addOption(dockerSuiteParallelOpt) .addOption(actionParallelOpt) .addOption(randomOrderOpt) .addOption(stopWhenFailOpt) diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/RegressionTest.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/RegressionTest.groovy index d654fb8e5f5..15a62ac9ac4 100644 --- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/RegressionTest.groovy +++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/RegressionTest.groovy @@ -52,16 +52,22 @@ import java.util.function.Predicate @CompileStatic class RegressionTest { + static enum GroupExecType { + NORMAL, + SINGLE, // group contains nonConcurrent + DOCKER, // group contains docker + } + static ClassLoader classloader static CompilerConfiguration compileConfig static GroovyShell shell static ExecutorService scriptExecutors - static ExecutorService suiteExecutors - static ExecutorService singleSuiteExecutors static ExecutorService actionExecutors + static Map<GroupExecType, ExecutorService> suiteExecutors static ThreadLocal<Integer> threadLoadedClassNum = new ThreadLocal<>() static final int cleanLoadedClassesThreshold = 20 static String nonConcurrentTestGroup = "nonConcurrent" + static String dockerTestGroup = "docker" static { ch.qos.logback.classic.Logger loggerOfSuite = @@ -113,8 +119,9 @@ class RegressionTest { } } actionExecutors.shutdown() - suiteExecutors.shutdown() - singleSuiteExecutors.shutdown() + for (ExecutorService suiteExecutor : suiteExecutors.values()) { + suiteExecutor.shutdown() + } scriptExecutors.shutdown() log.info("Test finished") if (!success) { @@ -135,17 +142,24 @@ class RegressionTest { .build(); scriptExecutors = Executors.newFixedThreadPool(config.parallel, scriptFactory) + suiteExecutors = [:] BasicThreadFactory suiteFactory = new BasicThreadFactory.Builder() .namingPattern("suite-thread-%d") .priority(Thread.MAX_PRIORITY) .build(); - suiteExecutors = Executors.newFixedThreadPool(config.suiteParallel, suiteFactory) + suiteExecutors[GroupExecType.NORMAL] = Executors.newFixedThreadPool(config.suiteParallel, suiteFactory) BasicThreadFactory singleSuiteFactory = new BasicThreadFactory.Builder() .namingPattern("non-concurrent-thread-%d") .priority(Thread.MAX_PRIORITY) .build(); - singleSuiteExecutors = Executors.newFixedThreadPool(1, singleSuiteFactory) + suiteExecutors[GroupExecType.SINGLE] = Executors.newFixedThreadPool(1, singleSuiteFactory) + + BasicThreadFactory dockerSuiteFactory = new BasicThreadFactory.Builder() + .namingPattern("docker-suite-thread-%d") + .priority(Thread.MAX_PRIORITY) + .build(); + suiteExecutors[GroupExecType.DOCKER] = Executors.newFixedThreadPool(config.dockerSuiteParallel, dockerSuiteFactory) BasicThreadFactory actionFactory = new BasicThreadFactory.Builder() .namingPattern("action-thread-%d") @@ -183,9 +197,9 @@ class RegressionTest { return sources } - static void runScript(Config config, ScriptSource source, Recorder recorder, boolean isSingleThreadScript) { + static void runScript(Config config, ScriptSource source, Recorder recorder, GroupExecType grpExecType) { def suiteFilter = { String suiteName, String groupName -> - canRun(config, suiteName, groupName, isSingleThreadScript) + canRun(config, suiteName, groupName, grpExecType) } def file = source.getFile() int failureLimit = Integer.valueOf(config.otherConfigs.getOrDefault("max_failure_num", "-1").toString()); @@ -196,12 +210,7 @@ class RegressionTest { return; } def eventListeners = getEventListeners(config, recorder) - ExecutorService executors = null - if (isSingleThreadScript) { - executors = singleSuiteExecutors - } else { - executors = suiteExecutors - } + ExecutorService executors = suiteExecutors[grpExecType] new ScriptContext(file, executors, actionExecutors, config, eventListeners, suiteFilter).start { scriptContext -> @@ -227,11 +236,20 @@ class RegressionTest { scriptSources.eachWithIndex { source, i -> // log.info("Prepare scripts [${i + 1}/${totalFile}]".toString()) def future = scriptExecutors.submit { - runScript(config, source, recorder, false) + runScript(config, source, recorder, GroupExecType.NORMAL) } futures.add(future) } + List<Future> dockerFutures = Lists.newArrayList() + scriptSources.eachWithIndex { source, i -> +// log.info("Prepare scripts [${i + 1}/${totalFile}]".toString()) + def future = scriptExecutors.submit { + runScript(config, source, recorder, GroupExecType.DOCKER) + } + dockerFutures.add(future) + } + // wait all scripts for (Future future : futures) { try { @@ -250,12 +268,20 @@ class RegressionTest { scriptSources.eachWithIndex { source, i -> // log.info("Prepare scripts [${i + 1}/${totalFile}]".toString()) def future = scriptExecutors.submit { - runScript(config, source, recorder, true) + runScript(config, source, recorder, GroupExecType.SINGLE) } futures.add(future) } // wait all scripts + for (Future future : dockerFutures) { + try { + future.get() + } catch (Throwable t) { + // do nothing, because already save to Recorder + } + } + for (Future future : futures) { try { future.get() @@ -311,19 +337,19 @@ class RegressionTest { return true } - static boolean canRun(Config config, String suiteName, String group, boolean isSingleThreadScript) { + static boolean canRun(Config config, String suiteName, String group, GroupExecType grpExecType) { + return getGroupExecType(group) == grpExecType && filterGroups(config, group) && filterSuites(config, suiteName) + } + + static GroupExecType getGroupExecType(String group) { Set<String> suiteGroups = group.split(',').collect { g -> g.trim() }.toSet(); - if (isSingleThreadScript) { - if (!suiteGroups.contains(nonConcurrentTestGroup)) { - return false - } + if (suiteGroups.contains(nonConcurrentTestGroup)) { + return GroupExecType.SINGLE + } else if (suiteGroups.contains(dockerTestGroup)) { + return GroupExecType.DOCKER } else { - if (suiteGroups.contains(nonConcurrentTestGroup)) { - return false - } + return GroupExecType.NORMAL } - - return filterGroups(config, group) && filterSuites(config, suiteName) } static List<EventListener> getEventListeners(Config config, Recorder recorder) { @@ -409,7 +435,7 @@ class RegressionTest { } pluginPath.eachFileRecurse({ it -> if (it.name.endsWith(".groovy")) { - ScriptContext context = new ScriptContext(it, suiteExecutors, actionExecutors, + ScriptContext context = new ScriptContext(it, suiteExecutors[GroupExecType.NORMAL], actionExecutors, config, [], { name -> true }) File pluginFile = it context.start({ @@ -441,6 +467,9 @@ class RegressionTest { log.warn("install doris compose requirements failed: code=${proc.exitValue()}, " + "output: ${sout.toString()}, error: ${serr.toString()}") } + + def pipList = 'python -m pip list'.execute().text + log.info("python library: ${pipList}") } static void printPassed() { 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 ded07e898ad..5ef70a961e1 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 @@ -33,6 +33,7 @@ import groovy.json.JsonSlurper import com.google.common.collect.ImmutableList import org.apache.commons.lang3.ObjectUtils import org.apache.doris.regression.Config +import org.apache.doris.regression.RegressionTest import org.apache.doris.regression.action.BenchmarkAction import org.apache.doris.regression.action.ProfileAction import org.apache.doris.regression.action.WaitForAction @@ -264,6 +265,11 @@ class Suite implements GroovyInterceptable { return } + if (RegressionTest.getGroupExecType(group) != RegressionTest.GroupExecType.DOCKER) { + throw new Exception("Need to add 'docker' to docker suite's belong groups, " + + "see example demo_p0/docker_action.groovy") + } + boolean pipelineIsCloud = isCloudMode() boolean dockerIsCloud = false if (options.cloudMode == null) { @@ -1398,6 +1404,13 @@ class Suite implements GroovyInterceptable { } DebugPoint GetDebugPoint() { + def execType = RegressionTest.getGroupExecType(group); + if (execType != RegressionTest.GroupExecType.SINGLE + && execType != RegressionTest.GroupExecType.DOCKER) { + throw new Exception("Debug point must use in nonConcurrent suite or docker suite, " + + "need add 'nonConcurrent' or 'docker' to suite's belong groups, " + + "see example demo_p0/debugpoint_action.groovy.") + } return debugPoint } diff --git a/regression-test/suites/backup_restore/test_backup_cancelled.groovy b/regression-test/suites/backup_restore/test_backup_cancelled.groovy index ef95d870d18..4e021fa6524 100644 --- a/regression-test/suites/backup_restore/test_backup_cancelled.groovy +++ b/regression-test/suites/backup_restore/test_backup_cancelled.groovy @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -suite("test_backup_cancelled", "backup_cancelled") { +suite("test_backup_cancelled", "backup_cancelled,nonConcurrent") { String suiteName = "test_backup_cancelled" String repoName = "${suiteName}_repo_" + UUID.randomUUID().toString().replace("-", "") String dbName = "${suiteName}_db" @@ -58,36 +58,37 @@ suite("test_backup_cancelled", "backup_cancelled") { // test failed to get tablet when truncate or drop table - GetDebugPoint().enableDebugPointForAllBEs("SnapshotManager::make_snapshot.inject_failure", [tablet_id:"${tabletId}", execute:3]); - - - sql """ - BACKUP SNAPSHOT ${dbName}.${snapshotName} - TO `${repoName}` - ON (${tableName}) - """ - - syncer.waitSnapshotFinish(dbName) + try { + GetDebugPoint().enableDebugPointForAllBEs("SnapshotManager::make_snapshot.inject_failure", [tablet_id:"${tabletId}", execute:3]); + sql """ + BACKUP SNAPSHOT ${dbName}.${snapshotName} + TO `${repoName}` + ON (${tableName}) + """ - GetDebugPoint().disableDebugPointForAllBEs("SnapshotManager::make_snapshot.inject_failure") + syncer.waitSnapshotFinish(dbName) + } finally { + GetDebugPoint().disableDebugPointForAllBEs("SnapshotManager::make_snapshot.inject_failure") + } // test missing versions when compaction or balance + try { + GetDebugPoint().enableDebugPointForAllBEs("Tablet::capture_consistent_versions.inject_failure", [tablet_id:"${tabletId}", execute:1]); - GetDebugPoint().enableDebugPointForAllBEs("Tablet::capture_consistent_versions.inject_failure", [tablet_id:"${tabletId}", execute:1]); - - sql """ - BACKUP SNAPSHOT ${dbName}.${snapshotName_1} - TO `${repoName}` - ON (${tableName}) - """ - - syncer.waitSnapshotFinish(dbName) + sql """ + BACKUP SNAPSHOT ${dbName}.${snapshotName_1} + TO `${repoName}` + ON (${tableName}) + """ - GetDebugPoint().disableDebugPointForAllBEs("Tablet::capture_consistent_versions.inject_failure"); + syncer.waitSnapshotFinish(dbName) + } finally { + GetDebugPoint().disableDebugPointForAllBEs("Tablet::capture_consistent_versions.inject_failure"); + } def snapshot = syncer.getSnapshotTimestamp(repoName, snapshotName) diff --git a/regression-test/suites/backup_restore/test_backup_restore_atomic_with_alter.groovy b/regression-test/suites/backup_restore/test_backup_restore_atomic_with_alter.groovy index 2754e5f8af6..4c835f02ef5 100644 --- a/regression-test/suites/backup_restore/test_backup_restore_atomic_with_alter.groovy +++ b/regression-test/suites/backup_restore/test_backup_restore_atomic_with_alter.groovy @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -suite("test_backup_restore_atomic_with_alter", "backup_restore") { +suite("test_backup_restore_atomic_with_alter", "backup_restore,nonConcurrent") { if (!getFeConfig("enable_debug_points").equals("true")) { logger.info("Config.enable_debug_points=true is required") return @@ -96,6 +96,7 @@ suite("test_backup_restore_atomic_with_alter", "backup_restore") { sql "DROP TABLE ${dbName}.${tableNamePrefix}_0 FORCE" // disable restore + try { GetDebugPoint().enableDebugPointForAllFEs("FE.PAUSE_NON_PENDING_RESTORE_JOB", [value:snapshotName]) sql """ @@ -239,6 +240,9 @@ suite("test_backup_restore_atomic_with_alter", "backup_restore") { } sql "DROP DATABASE ${dbName} FORCE" sql "DROP REPOSITORY `${repoName}`" + } finally { + GetDebugPoint().disableDebugPointForAllFEs("FE.PAUSE_NON_PENDING_RESTORE_JOB") + } } diff --git a/regression-test/suites/clone_p0/test_clone_no_missing_version.groovy b/regression-test/suites/clone_p0/test_clone_no_missing_version.groovy index 75eb3866ec8..b19521441dd 100644 --- a/regression-test/suites/clone_p0/test_clone_no_missing_version.groovy +++ b/regression-test/suites/clone_p0/test_clone_no_missing_version.groovy @@ -18,7 +18,7 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.NodeType -suite('test_clone_no_missing_version') { +suite('test_clone_no_missing_version', 'docker') { def tbl = 'tbl_test_clone_no_missing_version' def options = new ClusterOptions() options.feConfigs += [ diff --git a/regression-test/suites/clone_p0/test_decommission_mtmv.groovy b/regression-test/suites/clone_p0/test_decommission_mtmv.groovy index 24853aa718c..b29d5c13c94 100644 --- a/regression-test/suites/clone_p0/test_decommission_mtmv.groovy +++ b/regression-test/suites/clone_p0/test_decommission_mtmv.groovy @@ -17,7 +17,7 @@ import org.apache.doris.regression.suite.ClusterOptions -suite('test_decommission_mtmv') { +suite('test_decommission_mtmv', 'docker') { def options = new ClusterOptions() options.feConfigs += [ 'disable_balance=true', diff --git a/regression-test/suites/clone_p0/test_drop_clone_tablet_path_race.groovy b/regression-test/suites/clone_p0/test_drop_clone_tablet_path_race.groovy index 0c024dc8792..f9c72f3b71c 100644 --- a/regression-test/suites/clone_p0/test_drop_clone_tablet_path_race.groovy +++ b/regression-test/suites/clone_p0/test_drop_clone_tablet_path_race.groovy @@ -18,7 +18,10 @@ import org.apache.doris.regression.suite.ClusterOptions import org.junit.Assert -suite('test_drop_clone_tablet_path_race') { +suite('test_drop_clone_tablet_path_race', 'docker') { + if (isCloudMode()) { + return + } def options = new ClusterOptions() options.enableDebugPoints() options.feConfigs += [ diff --git a/regression-test/suites/compaction/test_compaction_with_visible_version.groovy b/regression-test/suites/compaction/test_compaction_with_visible_version.groovy index a8ed6e1e69d..ddf80e09642 100644 --- a/regression-test/suites/compaction/test_compaction_with_visible_version.groovy +++ b/regression-test/suites/compaction/test_compaction_with_visible_version.groovy @@ -19,7 +19,7 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.Http import org.apache.doris.regression.util.NodeType -suite('test_compaction_with_visible_version') { +suite('test_compaction_with_visible_version', 'docker') { def options = new ClusterOptions() def compaction_keep_invisible_version_min_count = 50L options.feConfigs += [ diff --git a/regression-test/suites/demo_p0/debugpoint_action.groovy b/regression-test/suites/demo_p0/debugpoint_action.groovy index 78355b9c5ed..9ad71a8345f 100644 --- a/regression-test/suites/demo_p0/debugpoint_action.groovy +++ b/regression-test/suites/demo_p0/debugpoint_action.groovy @@ -15,6 +15,11 @@ // specific language governing permissions and limitations // under the License. +import org.junit.Assert + +// This is a good example. +// Debug point must run in 'nonConcurrent' or 'docker' suites. +// If not a docker suite, must put nonConcurrent to the groups. suite('debugpoint_action', 'nonConcurrent') { try { GetDebugPoint().enableDebugPointForAllFEs('PublishVersionDaemon.stop_publish', [timeout:1]) @@ -25,3 +30,24 @@ suite('debugpoint_action', 'nonConcurrent') { GetDebugPoint().disableDebugPointForAllBEs('Tablet.build_tablet_report_info.version_miss') } } + +// This is a bad example. +// its group tag not contains nonConcurrent or docker. +suite('debugpoint_action_bad') { + Exception exception = null; + try { + GetDebugPoint().enableDebugPointForAllFEs('debugpoint_action_bad_xx', [timeout:1]) + } catch (Exception e) { + exception = e + } finally { + // this is bad example, should disable or clear debug points after end suite + // GetDebugPoint().disableDebugPointForAllFEs('debugpoint_action_bad_xx') + } + + Assert.assertNotNull(exception) + def expectMsg = "Debug point must use in nonConcurrent suite or docker suite" + def msg = exception.toString() + log.info("meet exception: ${msg}") + Assert.assertTrue("Expect exception msg contains '${expectMsg}', but meet '${msg}'", + msg.contains(expectMsg)) +} diff --git a/regression-test/suites/demo_p0/docker_action.groovy b/regression-test/suites/demo_p0/docker_action.groovy index d59c0f43774..6f293c4748a 100644 --- a/regression-test/suites/demo_p0/docker_action.groovy +++ b/regression-test/suites/demo_p0/docker_action.groovy @@ -17,7 +17,7 @@ import org.apache.doris.regression.suite.ClusterOptions -suite('docker_action') { +suite('docker_action', 'docker') { // run a new docker docker { sql '''create table tb1 (k int) DISTRIBUTED BY HASH(k) BUCKETS 10''' diff --git a/regression-test/suites/fault_injection_p0/partial_update/test_partial_update_during_sc.groovy b/regression-test/suites/fault_injection_p0/partial_update/test_partial_update_during_sc.groovy index 19ef81f781f..354d9557dde 100644 --- a/regression-test/suites/fault_injection_p0/partial_update/test_partial_update_during_sc.groovy +++ b/regression-test/suites/fault_injection_p0/partial_update/test_partial_update_during_sc.groovy @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -suite('test_partial_update_during_sc') { +suite('test_partial_update_during_sc', 'nonConcurrent') { String db = context.config.getDbNameByFile(context.file) sql "select 1;" // to create database diff --git a/regression-test/suites/insert_p0/group_commit/replay_wal_restart_fe.groovy b/regression-test/suites/insert_p0/group_commit/replay_wal_restart_fe.groovy index 0b84549586e..33664f52f2b 100644 --- a/regression-test/suites/insert_p0/group_commit/replay_wal_restart_fe.groovy +++ b/regression-test/suites/insert_p0/group_commit/replay_wal_restart_fe.groovy @@ -21,7 +21,7 @@ import org.apache.doris.regression.suite.ClusterOptions -suite("replay_wal_restart_fe") { +suite("replay_wal_restart_fe", 'docker') { def check_schema_change = { state -> for (int i = 0; i < 30; i++) { def jobs = sql_return_maparray "SHOW ALTER TABLE COLUMN WHERE TableName = 'tbl_2' order by CreateTime desc;" diff --git a/regression-test/suites/inverted_index_p0/index_change/test_build_index_with_clone_by_docker.groovy b/regression-test/suites/inverted_index_p0/index_change/test_build_index_with_clone_by_docker.groovy index 9d30ca30c0c..999b58350ff 100644 --- a/regression-test/suites/inverted_index_p0/index_change/test_build_index_with_clone_by_docker.groovy +++ b/regression-test/suites/inverted_index_p0/index_change/test_build_index_with_clone_by_docker.groovy @@ -19,7 +19,10 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.NodeType import org.apache.doris.regression.suite.SuiteCluster -suite("test_build_index_with_clone_by_docker"){ +suite("test_build_index_with_clone_by_docker", 'docker'){ + if (isCloudMode()) { + return + } def timeout = 300000 def delta_time = 1000 def alter_res = "null" diff --git a/regression-test/suites/load/insert/test_min_load_replica_num_complicate.groovy b/regression-test/suites/load/insert/test_min_load_replica_num_complicate.groovy index 10869ed9bf2..d6c9c71539b 100644 --- a/regression-test/suites/load/insert/test_min_load_replica_num_complicate.groovy +++ b/regression-test/suites/load/insert/test_min_load_replica_num_complicate.groovy @@ -34,7 +34,7 @@ class InjectCase { } -suite('test_min_load_replica_num_complicate') { +suite('test_min_load_replica_num_complicate', 'docker') { def beCloneCostMs = 3000 def random = new Random() diff --git a/regression-test/suites/load/insert/test_publish_one_succ.groovy b/regression-test/suites/load/insert/test_publish_one_succ.groovy index 22f78c64300..f58bca5c458 100644 --- a/regression-test/suites/load/insert/test_publish_one_succ.groovy +++ b/regression-test/suites/load/insert/test_publish_one_succ.groovy @@ -18,7 +18,7 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.NodeType -suite('test_publish_one_succ') { +suite('test_publish_one_succ', 'docker') { def options = new ClusterOptions() options.enableDebugPoints() docker(options) { diff --git a/regression-test/suites/load_p0/insert/test_min_load_replica_num_simple.groovy b/regression-test/suites/load_p0/insert/test_min_load_replica_num_simple.groovy index 75d7155c3d4..88bcbfd248e 100644 --- a/regression-test/suites/load_p0/insert/test_min_load_replica_num_simple.groovy +++ b/regression-test/suites/load_p0/insert/test_min_load_replica_num_simple.groovy @@ -17,7 +17,7 @@ import org.apache.doris.regression.suite.ClusterOptions -suite('test_min_load_replica_num_simple') { +suite('test_min_load_replica_num_simple', 'docker') { def options = new ClusterOptions() options.feConfigs.add('tablet_checker_interval_ms=1000') docker(options) { diff --git a/regression-test/suites/load_p0/stream_load/test_coordidator_be_restart.groovy b/regression-test/suites/load_p0/stream_load/test_coordidator_be_restart.groovy index bb6b0c18a0d..e728335003a 100644 --- a/regression-test/suites/load_p0/stream_load/test_coordidator_be_restart.groovy +++ b/regression-test/suites/load_p0/stream_load/test_coordidator_be_restart.groovy @@ -18,7 +18,7 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.http.NoHttpResponseException -suite('test_coordidator_be_restart') { +suite('test_coordidator_be_restart', 'docker') { def options = new ClusterOptions() options.cloudMode = false options.enableDebugPoints() diff --git a/regression-test/suites/migrate_p0/test_migrate_disk_with_publish_version.groovy b/regression-test/suites/migrate_p0/test_migrate_disk_with_publish_version.groovy index e5b22b791af..61dac3e4141 100644 --- a/regression-test/suites/migrate_p0/test_migrate_disk_with_publish_version.groovy +++ b/regression-test/suites/migrate_p0/test_migrate_disk_with_publish_version.groovy @@ -18,7 +18,10 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.NodeType -suite('test_migrate_disk_with_publish_version') { +suite('test_migrate_disk_with_publish_version', 'docker') { + if (isCloudMode()) { + return + } def checkTabletOnHDD = { isOnHdd -> sleep 5000 diff --git a/regression-test/suites/partition_p0/test_create_table_exception.groovy b/regression-test/suites/partition_p0/test_create_table_exception.groovy index 96f097c7670..7c96e4b59da 100644 --- a/regression-test/suites/partition_p0/test_create_table_exception.groovy +++ b/regression-test/suites/partition_p0/test_create_table_exception.groovy @@ -18,7 +18,7 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.NodeType import org.apache.doris.regression.suite.SuiteCluster -suite("test_create_table_exception") { +suite("test_create_table_exception", "docker") { def options = new ClusterOptions() options.enableDebugPoints() options.setFeNum(3) diff --git a/regression-test/suites/partition_p0/test_partition_create_tablet_rr.groovy b/regression-test/suites/partition_p0/test_partition_create_tablet_rr.groovy index f7e77f06f38..836dff938f8 100644 --- a/regression-test/suites/partition_p0/test_partition_create_tablet_rr.groovy +++ b/regression-test/suites/partition_p0/test_partition_create_tablet_rr.groovy @@ -18,7 +18,7 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.NodeType import org.apache.doris.regression.suite.SuiteCluster -suite("test_partition_create_tablet_rr") { +suite("test_partition_create_tablet_rr", "docker") { def options = new ClusterOptions() options.beNum = 1 options.feConfigs.add('disable_balance=true') diff --git a/regression-test/suites/query_p0/join/test_inject_send_filter_size_fail/test_inject_send_filter_size_fail.groovy b/regression-test/suites/query_p0/join/test_inject_send_filter_size_fail/test_inject_send_filter_size_fail.groovy index ad0325a61fe..8ab842ae7c1 100644 --- a/regression-test/suites/query_p0/join/test_inject_send_filter_size_fail/test_inject_send_filter_size_fail.groovy +++ b/regression-test/suites/query_p0/join/test_inject_send_filter_size_fail/test_inject_send_filter_size_fail.groovy @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -suite("test_inject_send_filter_size_fail") { +suite("test_inject_send_filter_size_fail", "nonConcurrent") { sql "set parallel_pipeline_task_num=3" sql "set enable_runtime_filter_prune=false" sql "set enable_sync_runtime_filter_size=true" diff --git a/regression-test/suites/query_p0/join/test_slow_close/test_slow_close.groovy b/regression-test/suites/query_p0/join/test_slow_close/test_slow_close.groovy index 0b36d2da5ab..4ae5ee5370c 100644 --- a/regression-test/suites/query_p0/join/test_slow_close/test_slow_close.groovy +++ b/regression-test/suites/query_p0/join/test_slow_close/test_slow_close.groovy @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -suite("test_slow_close") { +suite("test_slow_close", "nonConcurrent") { sql "set disable_join_reorder=true;" sql "set runtime_filter_type='bloom_filter';" sql "set parallel_pipeline_task_num=3" diff --git a/regression-test/suites/query_p0/test_forward_qeury.groovy b/regression-test/suites/query_p0/test_forward_qeury.groovy index 563c2ded4aa..d4761c835a2 100644 --- a/regression-test/suites/query_p0/test_forward_qeury.groovy +++ b/regression-test/suites/query_p0/test_forward_qeury.groovy @@ -19,7 +19,7 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.NodeType -suite("test_forward_query") { +suite("test_forward_query", 'docker') { def options = new ClusterOptions() options.enableDebugPoints() options.setFeNum(2) @@ -46,4 +46,4 @@ suite("test_forward_query") { def ret = sql """ SELECT * FROM ${tbl} """ assertEquals(ret[0][0], 1) } -} \ No newline at end of file +} diff --git a/regression-test/suites/schema_change/test_schema_change_concurrent_with_txn.groovy b/regression-test/suites/schema_change/test_schema_change_concurrent_with_txn.groovy index d250a000c01..3a63e306ae1 100644 --- a/regression-test/suites/schema_change/test_schema_change_concurrent_with_txn.groovy +++ b/regression-test/suites/schema_change/test_schema_change_concurrent_with_txn.groovy @@ -18,7 +18,7 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.NodeType -suite('test_schema_change_concurrent_with_txn') { +suite('test_schema_change_concurrent_with_txn', 'docker') { def options = new ClusterOptions() options.enableDebugPoints() options.feConfigs.add('publish_wait_time_second=-1') diff --git a/regression-test/suites/storage_medium_p0/test_partition_default_medium.groovy b/regression-test/suites/storage_medium_p0/test_partition_default_medium.groovy index 3543ce64ab1..163761833c2 100644 --- a/regression-test/suites/storage_medium_p0/test_partition_default_medium.groovy +++ b/regression-test/suites/storage_medium_p0/test_partition_default_medium.groovy @@ -18,7 +18,7 @@ import org.apache.doris.regression.suite.ClusterOptions import org.apache.doris.regression.util.NodeType import org.apache.doris.regression.suite.SuiteCluster -suite("test_partition_default_medium") { +suite("test_partition_default_medium", 'docker') { def options = new ClusterOptions() options.feConfigs += [ 'default_storage_medium=HDD', diff --git a/regression-test/suites/storage_medium_p0/test_storage_medium_has_disk.groovy b/regression-test/suites/storage_medium_p0/test_storage_medium_has_disk.groovy index 9c90c89e57c..c252e10b130 100644 --- a/regression-test/suites/storage_medium_p0/test_storage_medium_has_disk.groovy +++ b/regression-test/suites/storage_medium_p0/test_storage_medium_has_disk.groovy @@ -17,7 +17,11 @@ import org.apache.doris.regression.suite.ClusterOptions -suite('test_storage_medium_has_disk') { +suite('test_storage_medium_has_disk', 'docker') { + if (isCloudMode()) { + return + } + def checkPartitionMedium = { table, isHdd -> def partitions = sql_return_maparray "SHOW PARTITIONS FROM ${table}" assertTrue(partitions.size() > 0) diff --git a/regression-test/suites/trash_p0/clean_trash.groovy b/regression-test/suites/trash_p0/clean_trash.groovy index 98e7e6d01e5..525e8054ce5 100644 --- a/regression-test/suites/trash_p0/clean_trash.groovy +++ b/regression-test/suites/trash_p0/clean_trash.groovy @@ -17,7 +17,10 @@ import org.apache.doris.regression.suite.ClusterOptions import org.junit.Assert -suite("test_clean_trash", "p0") { +suite("test_clean_trash", "docker") { + if (isCloudMode()) { + return + } def options = new ClusterOptions() options.enableDebugPoints() options.feConfigs += [ @@ -73,4 +76,4 @@ suite("test_clean_trash", "p0") { sql """admin clean trash""" checkFunc(true) } -} \ No newline at end of file +} diff --git a/regression-test/suites/unique_with_mow_p0/partial_update/test_partial_update_conflict_be_restart.groovy b/regression-test/suites/unique_with_mow_p0/partial_update/test_partial_update_conflict_be_restart.groovy index bc2a44425b3..642363f9098 100644 --- a/regression-test/suites/unique_with_mow_p0/partial_update/test_partial_update_conflict_be_restart.groovy +++ b/regression-test/suites/unique_with_mow_p0/partial_update/test_partial_update_conflict_be_restart.groovy @@ -35,7 +35,7 @@ import org.apache.http.client.methods.CloseableHttpResponse import org.apache.http.util.EntityUtils import org.apache.doris.regression.suite.ClusterOptions -suite("test_partial_update_conflict_be_restart") { +suite("test_partial_update_conflict_be_restart", 'docker') { def dbName = context.config.getDbNameByFile(context.file) def options = new ClusterOptions() diff --git a/regression-test/suites/unique_with_mow_p0/test_mow_full_clone_exception.groovy b/regression-test/suites/unique_with_mow_p0/test_mow_full_clone_exception.groovy index c3fb567f258..42befff4e54 100644 --- a/regression-test/suites/unique_with_mow_p0/test_mow_full_clone_exception.groovy +++ b/regression-test/suites/unique_with_mow_p0/test_mow_full_clone_exception.groovy @@ -29,7 +29,7 @@ import org.apache.doris.regression.util.NodeType // // the bug is fixed in #37001 -suite('test_full_clone_exception') { +suite('test_full_clone_exception', 'docker') { def options = new ClusterOptions() options.feConfigs += [ 'disable_tablet_scheduler=true', diff --git a/run-regression-test.sh b/run-regression-test.sh index 588d28df449..118d5e81061 100755 --- a/run-regression-test.sh +++ b/run-regression-test.sh @@ -43,6 +43,7 @@ Usage: $0 <shell_options> <framework_options> -genOut generate .out file if not exist -forceGenOut delete and generate .out file -parallel run tests using specified threads + -dockerSuiteParallel run docker tests using specified threads -randomOrder run tests in a random order -noKillDocker don't kill container when finish docker suites -times rum tests {times} times --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org