From a919f46f3db814b5465a5cb33843bfc21f7f0d6e Mon Sep 17 00:00:00 2001 From: aressu1985 <175816613@qq.com> Date: Tue, 2 May 2023 17:33:23 +0800 Subject: [PATCH 1/6] modify socketTimeout to 120s --- mo.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mo.yml b/mo.yml index c6e6720bf..4ede5a474 100755 --- a/mo.yml +++ b/mo.yml @@ -16,7 +16,7 @@ jdbc: zeroDateTimeBehavior: "CONVERT_TO_NULL" failoverReadOnly: "false" serverTimezone: "Asia/Shanghai" - socketTimeout: 60000 + socketTimeout: 120000 #users user: name: "dump" From 1c62798dcc87897f60dbe1c53da426e99af47a02 Mon Sep 17 00:00:00 2001 From: aressu1985 <175816613@qq.com> Date: Sat, 20 May 2023 20:43:50 +0800 Subject: [PATCH 2/6] add regular match --- cases/template.result | 2 ++ cases/template.sql | 2 ++ lib/mo-tester-1.0-SNAPSHOT.jar | Bin 65409 -> 66103 bytes src/main/java/io/mo/cases/SqlCommand.java | 15 ++++++++++++++ src/main/java/io/mo/constant/COMMON.java | 3 +++ src/main/java/io/mo/db/Executor.java | 1 + src/main/java/io/mo/result/StmtResult.java | 22 +++++++++++++++++++++ src/main/java/io/mo/util/ResultParser.java | 2 +- src/main/java/io/mo/util/ScriptParser.java | 4 ++++ 9 files changed, 50 insertions(+), 1 deletion(-) diff --git a/cases/template.result b/cases/template.result index c56eaa7f3..09640b244 100644 --- a/cases/template.result +++ b/cases/template.result @@ -1,5 +1,7 @@ create table t1 ( a int not null default 1, int32 int primary key); insert into t1 (int32) values (-1),(1234567890),(2147483647); +insert into t1 (int32) values (-1),(1234567890),(2147483647); +(Duplicate entry)([\d\D]*)(for key 'int32') select * from t1 order by a desc, int32 asc; a int32 1 -1 diff --git a/cases/template.sql b/cases/template.sql index 84308bb47..85aaf2fdc 100644 --- a/cases/template.sql +++ b/cases/template.sql @@ -1,5 +1,7 @@ create table t1 ( a int not null default 1, int32 int primary key); insert into t1 (int32) values (-1),(1234567890),(2147483647); +-- @pattern +insert into t1 (int32) values (-1),(1234567890),(2147483647); select * from t1 order by a desc, int32 asc; select min(int32),max(int32),max(int32)-1 from t1; -- @bvt:issue#1234 diff --git a/lib/mo-tester-1.0-SNAPSHOT.jar b/lib/mo-tester-1.0-SNAPSHOT.jar index 18f90a24593a4c0204af8061b3493b9d433fe955..cf1d2c393af77d3ade40bd58ead5a29bd084ba35 100644 GIT binary patch delta 21477 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 diff --git a/src/main/java/io/mo/cases/SqlCommand.java b/src/main/java/io/mo/cases/SqlCommand.java index 9e0d3b82a..44ba4c9bf 100755 --- a/src/main/java/io/mo/cases/SqlCommand.java +++ b/src/main/java/io/mo/cases/SqlCommand.java @@ -43,6 +43,8 @@ public class SqlCommand { private int sleeptime = 0; + private boolean regularMatch = false; + public SqlCommand(){ command = new StringBuffer(); testResult = new TestResult(); @@ -189,6 +191,9 @@ public void setActResult(StmtResult actResult) { } public boolean checkResult(){ + if(this.regularMatch) + return expResult.regularMatch(actResult); + return expResult.equals(actResult); } public String getSeparator() { @@ -247,4 +252,14 @@ public void setUseDB(String useDB) { this.useDB = useDB; } + + + public boolean isRegularMatch() { + return regularMatch; + } + + public void setRegularMatch(boolean regularMatch) { + this.regularMatch = regularMatch; + } + } diff --git a/src/main/java/io/mo/constant/COMMON.java b/src/main/java/io/mo/constant/COMMON.java index 14a86f0ff..9de33027f 100755 --- a/src/main/java/io/mo/constant/COMMON.java +++ b/src/main/java/io/mo/constant/COMMON.java @@ -37,6 +37,9 @@ public class COMMON { public static String COLUMN_SEPARATOR_FLAG = "-- @separator:"; public static String RESOURCE_PATH_FLAG = "\\$resources"; + + //if result is type of error, and not unique, can use this flag to regular match + public static String REGULAR_MATCH_FLAG = "-- @pattern"; public static String LOG_DIR = "log"; public static String RESULT_DIR = "result"; diff --git a/src/main/java/io/mo/db/Executor.java b/src/main/java/io/mo/db/Executor.java index 1649d93d8..9990bc459 100755 --- a/src/main/java/io/mo/db/Executor.java +++ b/src/main/java/io/mo/db/Executor.java @@ -50,6 +50,7 @@ public static void run(TestScript script){ ", failed:" + script.getFailedCmdCount() + ", ignored:" + script.getIgnoredCmdCount() + ", abnoraml:" + script.getAbnormalCmdCount()); + dropTestDB(connection, script); return; } diff --git a/src/main/java/io/mo/result/StmtResult.java b/src/main/java/io/mo/result/StmtResult.java index 5c0d5c253..0c2a9310a 100644 --- a/src/main/java/io/mo/result/StmtResult.java +++ b/src/main/java/io/mo/result/StmtResult.java @@ -3,6 +3,10 @@ import io.mo.cases.SqlCommand; import io.mo.constant.RESULT; import org.apache.log4j.Logger; +import org.apache.xmlbeans.impl.xb.xsdschema.PatternDocument; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class StmtResult { /** @@ -104,6 +108,16 @@ public boolean equals(StmtResult stmtResult){ return true; } + + public boolean regularMatch(StmtResult stmtResult){ + + if(stmtResult.errorMessage.matches(this.errorMessage)) + return true; + else { + LOG.error(String.format("[%s] can not match : \n %s",stmtResult.errorMessage,this.errorMessage)); + return false; + } + } public int getType() { return type; @@ -190,4 +204,12 @@ else if(this.type == RESULT.STMT_RESULT_TYPE_ABNORMAL) else return orginalRSText; } + + public static void main(String[] args){ + Pattern p = Pattern.compile("(Duplicate entry ')(.)(' for key 'int32')"); + //Pattern p = Pattern.compile("(Duplicate)([0-9]*$)"); + Matcher m = p.matcher("Duplicate entry '1' for key 'int32'"); + //Matcher m = p.matcher("Duplicate1"); + System.out.println("Duplicate entry '1fdasf1' for key 'int32'".matches("(Duplicate entry)([\\d\\D]*)(for key 'int32')")); + } } diff --git a/src/main/java/io/mo/util/ResultParser.java b/src/main/java/io/mo/util/ResultParser.java index 2e882e786..492d0d70f 100755 --- a/src/main/java/io/mo/util/ResultParser.java +++ b/src/main/java/io/mo/util/ResultParser.java @@ -239,7 +239,7 @@ public static RSSet convertToRSSet(String rsText,String separator){ if(separator.equals("space")) buffer.append(rsText.replaceAll(RESULT.COLUMN_SEPARATOR_SPACE,RESULT.COLUMN_SEPARATOR_SYSTEM)); RSSet rsSet = new RSSet(); - + //first line is meta info String labelline; boolean lastrow = false; diff --git a/src/main/java/io/mo/util/ScriptParser.java b/src/main/java/io/mo/util/ScriptParser.java index 3ff8d8cf7..6a7ac704f 100755 --- a/src/main/java/io/mo/util/ScriptParser.java +++ b/src/main/java/io/mo/util/ScriptParser.java @@ -77,6 +77,10 @@ public static void parseScript(String path){ String sysCmd = trimmedLine.substring(COMMON.SYSTEM_CMD_FLAG.length()); command.addSysCMD(sysCmd); } + + if(trimmedLine.startsWith(COMMON.REGULAR_MATCH_FLAG)){ + command.setRegularMatch(true); + } //if line is mark to start a new connection if(trimmedLine.startsWith(COMMON.NEW_SESSION_START_FLAG)){ From 3798e260b3b7a7cc4207b75803efe84243f1b70f Mon Sep 17 00:00:00 2001 From: aressu1985 <175816613@qq.com> Date: Wed, 31 May 2023 21:06:47 +0800 Subject: [PATCH 3/6] support rc + Pessimistic --- README.md | 5 +- lib/mo-tester-1.0-SNAPSHOT.jar | Bin 66103 -> 68437 bytes run.yml | 5 +- src/main/java/io/mo/Tester.java | 1 + src/main/java/io/mo/cases/SqlCommand.java | 32 +++++++++++ src/main/java/io/mo/constant/COMMON.java | 5 +- src/main/java/io/mo/db/ConnectionManager.java | 2 +- src/main/java/io/mo/db/Executor.java | 50 ++++++++++++++++++ src/main/java/io/mo/util/RunConfUtil.java | 5 ++ src/main/java/io/mo/util/ScriptParser.java | 29 +++++++++- 10 files changed, 128 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1551c25ed..2737769d2 100644 --- a/README.md +++ b/README.md @@ -107,8 +107,9 @@ Sometimes, to achieve some specific purposes, such as pausing or creating a new | -- @sleep:{time} | The mo-tester will wait for {time} s | | -- @session:id=2&user=root&password=111
-- @session | The mo-tester will create a new connetion to execute sql statements between those two tags.
Default value of id is 1, max is 10.
Defualt value of user and password is configured in `mo.yml`. | | -- @sortkey: | If the result is sorted, need set this tag for the sql statement. e.g.
-- @sortkey:0,1: means sort keys are first column and second colum. | -| -- @delimiter {C} | Set new delimeter to String C, C can any string expect that starts with [/,#,--] | -| -- @system {C} | Set System Command that will be executed by the runner system | +| -- @delimiter {C} | Set new delimeter to String C, C can any string expect that starts with [/,#,--] | +| -- @system {C} | Set System Command that will be executed by the runner system | +| -- @wait:{D}:[commit or wait] | means this command will be blocked until the connection[id={D}] commit or rollback | diff --git a/lib/mo-tester-1.0-SNAPSHOT.jar b/lib/mo-tester-1.0-SNAPSHOT.jar index cf1d2c393af77d3ade40bd58ead5a29bd084ba35..be1b7d6812ae172e82579bf0dc05a09a29a6e842 100644 GIT binary patch delta 30801 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 oTk^8OL7+{V`|4LFy}OQ*$NqCO?@uke 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 delta 28443 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 diff --git a/run.yml b/run.yml index 982068e33..507c1240f 100755 --- a/run.yml +++ b/run.yml @@ -14,4 +14,7 @@ rate: 100 builtindb: mo_catalog,mo_task,information_schema,mysql,system_metrics,system,query_result #outfiles: files or paths that the mo generates during the test -outfiles: json/export_1.csv,json/export_2.csv,into_outfile,into_outfile_2 \ No newline at end of file +outfiles: json/export_1.csv,json/export_2.csv,into_outfile,into_outfile_2 + +#wait timeout +waittime: 5000 \ No newline at end of file diff --git a/src/main/java/io/mo/Tester.java b/src/main/java/io/mo/Tester.java index a02a82a11..702ab5652 100755 --- a/src/main/java/io/mo/Tester.java +++ b/src/main/java/io/mo/Tester.java @@ -34,6 +34,7 @@ public static void main(String[] args){ int rate = RunConfUtil.getRate(); COMMON.RESOURCE_PATH = RunConfUtil.getResourcePath(); + COMMON.WAIT_TIMEOUT = RunConfUtil.getWaitTime(); //parse the paras if(args != null){ diff --git a/src/main/java/io/mo/cases/SqlCommand.java b/src/main/java/io/mo/cases/SqlCommand.java index 44ba4c9bf..15e45b4aa 100755 --- a/src/main/java/io/mo/cases/SqlCommand.java +++ b/src/main/java/io/mo/cases/SqlCommand.java @@ -42,6 +42,13 @@ public class SqlCommand { private SqlCommand next; private int sleeptime = 0; + + private boolean needWait = false; + + + private int waitConnId = 0; + + private String waitOperation = "commit"; private boolean regularMatch = false; @@ -262,4 +269,29 @@ public void setRegularMatch(boolean regularMatch) { this.regularMatch = regularMatch; } + public boolean isNeedWait() { + return needWait; + } + + public void setNeedWait(boolean needWait) { + this.needWait = needWait; + } + + public int getWaitConnId() { + return waitConnId; + } + + public void setWaitConnId(int waitConnId) { + this.waitConnId = waitConnId; + } + + public String getWaitOperation() { + return waitOperation; + } + + public void setWaitOperation(String waitOperation) { + this.waitOperation = waitOperation; + } + + } diff --git a/src/main/java/io/mo/constant/COMMON.java b/src/main/java/io/mo/constant/COMMON.java index 9de33027f..e8dcd08c1 100755 --- a/src/main/java/io/mo/constant/COMMON.java +++ b/src/main/java/io/mo/constant/COMMON.java @@ -38,6 +38,8 @@ public class COMMON { public static String COLUMN_SEPARATOR_FLAG = "-- @separator:"; public static String RESOURCE_PATH_FLAG = "\\$resources"; + public static String WAIT_FLAG = "-- @wait:"; + //if result is type of error, and not unique, can use this flag to regular match public static String REGULAR_MATCH_FLAG = "-- @pattern"; @@ -50,7 +52,8 @@ public class COMMON { public static String RESOURCE_PATH = "./resources"; public static String UPDATE_RESULT_TEMPLATE = "Query OK, {num} row affected"; - + public static int WAIT_TIMEOUT = 5000; + public static int MAX_ROW_COUNT_IN_RS = 100;//the max row count in the resultset public static String THIS_IS_MO = "THIS IS MO"; diff --git a/src/main/java/io/mo/db/ConnectionManager.java b/src/main/java/io/mo/db/ConnectionManager.java index 04b56840c..734dc03ee 100755 --- a/src/main/java/io/mo/db/ConnectionManager.java +++ b/src/main/java/io/mo/db/ConnectionManager.java @@ -62,7 +62,7 @@ public static Connection getConnection(int index, String userName, String pwd){ for(int i = 0; i < 3; i++) { try { Class.forName(driver); - if (connections[index] == null || connections[0].isClosed()) { + if (connections[index] == null || connections[index].isClosed()) { connections[index] = DriverManager.getConnection(jdbcURL, userName, pwd); LOG.info("New conneciton from mo with[user="+userName+", pwd="+pwd+"] has been initialized."); return connections[index]; diff --git a/src/main/java/io/mo/db/Executor.java b/src/main/java/io/mo/db/Executor.java index 9990bc459..d4b1cc71b 100755 --- a/src/main/java/io/mo/db/Executor.java +++ b/src/main/java/io/mo/db/Executor.java @@ -121,6 +121,9 @@ public static void run(TestScript script){ command.setUseDB(connection.getCatalog()); statement = connection.createStatement(); String sqlCmd = command.getCommand().replaceAll(COMMON.RESOURCE_PATH_FLAG,COMMON.RESOURCE_PATH); + if(command.isNeedWait()){ + execWaitOperation(command); + } statement.execute(sqlCmd); ResultSet resultSet = statement.getResultSet(); if (resultSet != null) { @@ -181,6 +184,11 @@ public static void run(TestScript script){ //reconnect to mo, and set db to last use db LOG.warn(String.format("The mo-tester tries to re-connect to mo, con[id=%d, user=%s, pwd=%s, db=%s], please wait.....", command.getConn_id(),command.getConn_user(),command.getConn_pswd(),command.getUseDB())); + try{ + connection.close(); + }catch (SQLException ex){ + LOG.warn(String.format("Failed to close connection[id=%d], but effect nothing.",command.getConn_id())); + } connection = getConnection(command); if(connection != null && !connection.isClosed()) connection.setCatalog(command.getUseDB()); @@ -319,6 +327,9 @@ public static boolean genRS(TestScript script){ statement = connection.createStatement(); String sqlCmd = command.getCommand().replaceAll("\\$resources",COMMON.RESOURCE_PATH); + if(command.isNeedWait()){ + execWaitOperation(command); + } statement.execute(sqlCmd); ResultSet resultSet = statement.getResultSet(); if(resultSet != null){ @@ -631,6 +642,45 @@ public static void executeSysCmd(String cmd){ } } + + public static void execWaitOperation(SqlCommand command){ + new Thread(new Runnable() { + @Override + public void run() { + if (command.isNeedWait()) { + try { + Thread.sleep(COMMON.WAIT_TIMEOUT); + Connection conn = ConnectionManager.getConnection(command.getWaitConnId()); + if(command.getWaitOperation().equalsIgnoreCase("commit")) { + if(!conn.getAutoCommit()) + conn.commit(); + else { + Statement statement = conn.createStatement(); + statement.execute("commit"); + } + + LOG.info(String.format("Connection[id=%d] has committed automatically.",command.getWaitConnId())); + } + + if(command.getWaitOperation().equalsIgnoreCase("rollback")) { + if(!conn.getAutoCommit()) + conn.rollback(); + else { + Statement statement = conn.createStatement(); + statement.execute("rollback"); + } + LOG.info(String.format("Connection[id=%d] has rollback automatically.",command.getWaitConnId())); + } + + } catch (InterruptedException e) { + throw new RuntimeException(e); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + } + }).start(); + } public static void main(String[] args){ String exp = "You have an error in your SQL syntax; check the manual that corresponds to your MatrixOne server version for the right syntax to use. syntax error at position 55 near 'abc';"; diff --git a/src/main/java/io/mo/util/RunConfUtil.java b/src/main/java/io/mo/util/RunConfUtil.java index 88dcca910..708235d21 100755 --- a/src/main/java/io/mo/util/RunConfUtil.java +++ b/src/main/java/io/mo/util/RunConfUtil.java @@ -30,6 +30,11 @@ public static int getRate(){ return (int)conf.get("rate"); } + public static int getWaitTime(){ + if(conf == null) init(); + return (int)conf.get("waittime"); + } + public static String getResourcePath(){ if(conf == null) init(); String path = (String)conf.get("path"); diff --git a/src/main/java/io/mo/util/ScriptParser.java b/src/main/java/io/mo/util/ScriptParser.java index 6a7ac704f..251065ff5 100755 --- a/src/main/java/io/mo/util/ScriptParser.java +++ b/src/main/java/io/mo/util/ScriptParser.java @@ -1,10 +1,11 @@ package io.mo.util; +import freemarker.template.utility.NumberUtil; import io.mo.cases.SqlCommand; import io.mo.cases.TestScript; import io.mo.constant.COMMON; import org.apache.log4j.Logger; -import org.apache.poi.util.StringUtil; +import org.apache.commons.lang3.StringUtils; import java.io.*; import java.nio.charset.StandardCharsets; @@ -81,6 +82,32 @@ public static void parseScript(String path){ if(trimmedLine.startsWith(COMMON.REGULAR_MATCH_FLAG)){ command.setRegularMatch(true); } + + //if line is mark to set wait paras + if(trimmedLine.startsWith(COMMON.WAIT_FLAG)){ + String[] items = trimmedLine.split(":"); + //if flas is not formated like <-- @wait:1:commit >, ignore + if(items.length != 3) + continue; + else{ + if(StringUtils.isNumeric(items[1])){ + command.setWaitConnId(Integer.parseInt(items[1])); + }else { + LOG.warn(String.format("The connection id in flag[%s] is not a number, the flag is not valid.",trimmedLine)); + continue; + } + + if(items[2].equalsIgnoreCase("commit") || + items[2].equalsIgnoreCase("rollback")){ + command.setWaitOperation(items[2]); + }else { + LOG.warn(String.format("The operation in flag[%s] is not [commit] or [rollback], the flag is not valid.",trimmedLine)); + continue; + } + + command.setNeedWait(true); + } + } //if line is mark to start a new connection if(trimmedLine.startsWith(COMMON.NEW_SESSION_START_FLAG)){ From f33994461db8a37ceab9b5bc1843c657a2946177 Mon Sep 17 00:00:00 2001 From: aressu1985 <175816613@qq.com> Date: Fri, 15 Sep 2023 14:44:47 +0800 Subject: [PATCH 4/6] revert Fix pessimistic commit wait error --- lib/mo-tester-1.0-SNAPSHOT.jar | Bin 68943 -> 68516 bytes src/main/java/io/mo/db/Executor.java | 41 ++++++--------------------- 2 files changed, 8 insertions(+), 33 deletions(-) diff --git a/lib/mo-tester-1.0-SNAPSHOT.jar b/lib/mo-tester-1.0-SNAPSHOT.jar index 20e3a7da3eb7bf9fc667809fb5ad486c3db66ed9..7f1f32b8fe2ad15ae860cf89f7c1484ef474534e 100644 GIT binary patch delta 11698 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 delta 12174 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 diff --git a/src/main/java/io/mo/db/Executor.java b/src/main/java/io/mo/db/Executor.java index 4ce551164..d4b1cc71b 100755 --- a/src/main/java/io/mo/db/Executor.java +++ b/src/main/java/io/mo/db/Executor.java @@ -18,7 +18,6 @@ public class Executor { private static final Logger LOG = Logger.getLogger(Executor.class.getName()); - private static Thread waitThread = null; /** * run test file function */ @@ -125,25 +124,6 @@ public static void run(TestScript script){ if(command.isNeedWait()){ execWaitOperation(command); } - if(command.isNeedWait()){ - if(waitThread != null && waitThread.isAlive()){ - try { - LOG.error(String.format("Command[%s][row:%d] has been executed before connection[id=%d] commit.\nBut still need to wait for connection[id=%d] being committed", - command.getCommand(),command.getPosition(),command.getWaitConnId(),command.getWaitConnId())); - waitThread.join(); - script.addFailedCmd(command); - command.getTestResult().setErrorCode(RESULT.ERROR_CHECK_FAILED_CODE); - command.getTestResult().setErrorDesc(RESULT.ERROR_CHECK_FAILED_DESC); - command.getTestResult().setResult(RESULT.RESULT_TYPE_FAILED); - LOG.error("[" + script.getFileName() + "][row:" + command.getPosition() + "][" + command.getCommand().trim() + "] was executed failed, con[id=" - + command.getConn_id()+", user=" +command.getConn_user()+", pwd="+command.getConn_pswd()+"]."); - continue; - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - statement.execute(sqlCmd); ResultSet resultSet = statement.getResultSet(); if (resultSet != null) { @@ -662,15 +642,13 @@ public static void executeSysCmd(String cmd){ } } - + public static void execWaitOperation(SqlCommand command){ - waitThread = new Thread(new Runnable() { + new Thread(new Runnable() { @Override public void run() { if (command.isNeedWait()) { try { - LOG.info(String.format("Command[%s][row:%d] needs to wait connection[id:%d] %s", - command.getCommand(),command.getPosition(),command.getWaitConnId(),command.getWaitOperation())); Thread.sleep(COMMON.WAIT_TIMEOUT); Connection conn = ConnectionManager.getConnection(command.getWaitConnId()); if(command.getWaitOperation().equalsIgnoreCase("commit")) { @@ -680,11 +658,10 @@ public void run() { Statement statement = conn.createStatement(); statement.execute("commit"); } - - LOG.info(String.format("Connection[id=%d] has committed automatically,for command[%s][row:%d]", - command.getWaitConnId(),command.getCommand(),command.getPosition())); + + LOG.info(String.format("Connection[id=%d] has committed automatically.",command.getWaitConnId())); } - + if(command.getWaitOperation().equalsIgnoreCase("rollback")) { if(!conn.getAutoCommit()) conn.rollback(); @@ -692,10 +669,9 @@ public void run() { Statement statement = conn.createStatement(); statement.execute("rollback"); } - LOG.info(String.format("Connection[id=%d] has rollback automatically,for command[%s][row:%d]", - command.getWaitConnId(),command.getCommand(),command.getPosition())); + LOG.info(String.format("Connection[id=%d] has rollback automatically.",command.getWaitConnId())); } - + } catch (InterruptedException e) { throw new RuntimeException(e); } catch (SQLException e) { @@ -703,8 +679,7 @@ public void run() { } } } - }); - waitThread.start(); + }).start(); } public static void main(String[] args){ From 755867206f0559ffe482e31483a822ebee682e25 Mon Sep 17 00:00:00 2001 From: aressu1985 <175816613@qq.com> Date: Fri, 15 Sep 2023 14:55:33 +0800 Subject: [PATCH 5/6] revert revert --- lib/mo-tester-1.0-SNAPSHOT.jar | Bin 68516 -> 68943 bytes src/main/java/io/mo/db/Executor.java | 41 +++++++++++++++++++++------ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/lib/mo-tester-1.0-SNAPSHOT.jar b/lib/mo-tester-1.0-SNAPSHOT.jar index 7f1f32b8fe2ad15ae860cf89f7c1484ef474534e..20e3a7da3eb7bf9fc667809fb5ad486c3db66ed9 100644 GIT binary patch delta 12174 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 delta 11698 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 diff --git a/src/main/java/io/mo/db/Executor.java b/src/main/java/io/mo/db/Executor.java index d4b1cc71b..4ce551164 100755 --- a/src/main/java/io/mo/db/Executor.java +++ b/src/main/java/io/mo/db/Executor.java @@ -18,6 +18,7 @@ public class Executor { private static final Logger LOG = Logger.getLogger(Executor.class.getName()); + private static Thread waitThread = null; /** * run test file function */ @@ -124,6 +125,25 @@ public static void run(TestScript script){ if(command.isNeedWait()){ execWaitOperation(command); } + if(command.isNeedWait()){ + if(waitThread != null && waitThread.isAlive()){ + try { + LOG.error(String.format("Command[%s][row:%d] has been executed before connection[id=%d] commit.\nBut still need to wait for connection[id=%d] being committed", + command.getCommand(),command.getPosition(),command.getWaitConnId(),command.getWaitConnId())); + waitThread.join(); + script.addFailedCmd(command); + command.getTestResult().setErrorCode(RESULT.ERROR_CHECK_FAILED_CODE); + command.getTestResult().setErrorDesc(RESULT.ERROR_CHECK_FAILED_DESC); + command.getTestResult().setResult(RESULT.RESULT_TYPE_FAILED); + LOG.error("[" + script.getFileName() + "][row:" + command.getPosition() + "][" + command.getCommand().trim() + "] was executed failed, con[id=" + + command.getConn_id()+", user=" +command.getConn_user()+", pwd="+command.getConn_pswd()+"]."); + continue; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + statement.execute(sqlCmd); ResultSet resultSet = statement.getResultSet(); if (resultSet != null) { @@ -642,13 +662,15 @@ public static void executeSysCmd(String cmd){ } } - + public static void execWaitOperation(SqlCommand command){ - new Thread(new Runnable() { + waitThread = new Thread(new Runnable() { @Override public void run() { if (command.isNeedWait()) { try { + LOG.info(String.format("Command[%s][row:%d] needs to wait connection[id:%d] %s", + command.getCommand(),command.getPosition(),command.getWaitConnId(),command.getWaitOperation())); Thread.sleep(COMMON.WAIT_TIMEOUT); Connection conn = ConnectionManager.getConnection(command.getWaitConnId()); if(command.getWaitOperation().equalsIgnoreCase("commit")) { @@ -658,10 +680,11 @@ public void run() { Statement statement = conn.createStatement(); statement.execute("commit"); } - - LOG.info(String.format("Connection[id=%d] has committed automatically.",command.getWaitConnId())); + + LOG.info(String.format("Connection[id=%d] has committed automatically,for command[%s][row:%d]", + command.getWaitConnId(),command.getCommand(),command.getPosition())); } - + if(command.getWaitOperation().equalsIgnoreCase("rollback")) { if(!conn.getAutoCommit()) conn.rollback(); @@ -669,9 +692,10 @@ public void run() { Statement statement = conn.createStatement(); statement.execute("rollback"); } - LOG.info(String.format("Connection[id=%d] has rollback automatically.",command.getWaitConnId())); + LOG.info(String.format("Connection[id=%d] has rollback automatically,for command[%s][row:%d]", + command.getWaitConnId(),command.getCommand(),command.getPosition())); } - + } catch (InterruptedException e) { throw new RuntimeException(e); } catch (SQLException e) { @@ -679,7 +703,8 @@ public void run() { } } } - }).start(); + }); + waitThread.start(); } public static void main(String[] args){ From 1fb37b2db5f641c9fa72263eb2958651695cbcb1 Mon Sep 17 00:00:00 2001 From: aressu1985 <175816613@qq.com> Date: Wed, 17 Jan 2024 20:31:29 +0800 Subject: [PATCH 6/6] fix topic bug --- lib/mo-tester-1.0-SNAPSHOT.jar | Bin 79799 -> 79954 bytes src/main/java/io/mo/util/ScriptParser.java | 30 ++++++++++++--------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/mo-tester-1.0-SNAPSHOT.jar b/lib/mo-tester-1.0-SNAPSHOT.jar index 028463ed8fa3f61cfc1c619f8fd30c3153edd6a7..03ec74e4ed248493a5c42b9b6736fac29b573d2c 100644 GIT binary patch delta 6950 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 delta 6713 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