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/7] 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/7] 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/7] 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/7] 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/7] 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 615f7add2927d33a39eeaf3c81e46b2d9cb6d7e4 Mon Sep 17 00:00:00 2001 From: aressu1985 <175816613@qq.com> Date: Tue, 10 Oct 2023 16:57:19 +0800 Subject: [PATCH 6/7] add pprof --- cases/template.result | 1 + cases/template.sql | 1 + lib/mo-tester-1.0-SNAPSHOT.jar | Bin 69273 -> 71726 bytes mo.yml | 5 ++ run.sh | 11 +++- src/main/java/io/mo/Tester.java | 5 ++ src/main/java/io/mo/constant/COMMON.java | 2 + src/main/java/io/mo/db/Executor.java | 68 +++++++++++++++++++++++ src/main/java/io/mo/util/MoConfUtil.java | 24 +++++++- 9 files changed, 113 insertions(+), 4 deletions(-) diff --git a/cases/template.result b/cases/template.result index 09640b244..bd6e4171c 100644 --- a/cases/template.result +++ b/cases/template.result @@ -1,3 +1,4 @@ +select sleep(10); 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); diff --git a/cases/template.sql b/cases/template.sql index 85aaf2fdc..d8f9e1c13 100644 --- a/cases/template.sql +++ b/cases/template.sql @@ -1,3 +1,4 @@ +select sleep(10); create table t1 ( a int not null default 1, int32 int primary key); insert into t1 (int32) values (-1),(1234567890),(2147483647); -- @pattern diff --git a/lib/mo-tester-1.0-SNAPSHOT.jar b/lib/mo-tester-1.0-SNAPSHOT.jar index edcbb88f2a81b39418389e5b8eb203a57c548088..c545aa25fb7d46a8c906fe91786bbf287044d7f2 100644 GIT binary patch delta 25444 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

nPAj`IN!5d@eh%BG@7NRB=s)U1Gf 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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 07edd952e..b1b6d32ba 100755 --- a/src/main/java/io/mo/db/Executor.java +++ b/src/main/java/io/mo/db/Executor.java @@ -203,6 +203,12 @@ public static void run(TestScript script){ LOG.error("[EXPECT RESULT]:\n" + command.getTestResult().getExpResult()); LOG.error("[ACTUAL RESULT]:\n" + command.getTestResult().getActResult()); + if(COMMON.NEEDPPROF){ + LOG.info("Start to collect pprof information,please wait........"); + pprof(); + LOG.info("Finish to collect pprof information,the test will continue"); + } + //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())); @@ -657,6 +663,68 @@ public static void syncCommit(Connection connection){ } } + public static void pprof(){ + String[] debugServers = MoConfUtil.getDebugServers(); + if(debugServers != null){ + int port = MoConfUtil.getDebugPort(); + Thread[] threads = new Thread[debugServers.length]; + for(int i = 0; i < debugServers.length;i++){ + int index = i; + threads[index] = new Thread(new Runnable() { + @Override + public void run() { + try { + Process p = Runtime.getRuntime().exec(String.format("./pprof.sh -h %s -p %d",debugServers[index],port)); + InputStream is = p.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + p.waitFor(); + + StringBuffer execResut = new StringBuffer(); + String str = reader.readLine(); + while ( str != null) { + execResut.append(str+"\n"); + str = reader.readLine(); + } + + if (p.exitValue() != 0) { + LOG.error(String.format("The pprof operation has been executed failed.\n%s",execResut.toString())); + }else { + LOG.info(String.format("The pprof operation has been executed successfully.\n%s", execResut.toString())); + LOG.info(String.format("The result is in the dir ./report/pprof/%s/",debugServers[index])); + } + + } catch (IOException e) { + LOG.error("The pprof operation has been executed failed."); + LOG.error(String.format("The output of pprof operation is \n%s.",e.getMessage())); + } catch (InterruptedException e) { + LOG.error("The pprof operation has been executed failed."); + LOG.error(String.format("The output of pprof operation is \n%s.",e.getMessage())); + } + } + }); + threads[index].start(); + } + + boolean finished = false; + while(!finished){ + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + for(Thread thread:threads){ + if(thread.isAlive()){ + finished = false; + break; + } + finished = true; + } + } + } + + + } public static void executeSysCmd(String cmd){ try { diff --git a/src/main/java/io/mo/util/MoConfUtil.java b/src/main/java/io/mo/util/MoConfUtil.java index ae275abcc..c04787424 100755 --- a/src/main/java/io/mo/util/MoConfUtil.java +++ b/src/main/java/io/mo/util/MoConfUtil.java @@ -85,8 +85,30 @@ public static int getSocketTimeout(){ return COMMON.DEFAULT_MAX_EXECUTE_TIME; } + public static String[] getDebugServers(){ + Map debug = (Map)conf.get("debug"); + if(debug != null){ + String serverStr = debug.get("serverIP").toString(); + if(serverStr != null){ + return serverStr.split(","); + } + } + + return null; + } + + public static int getDebugPort(){ + Map debug = (Map)conf.get("debug"); + if(debug != null){ + String portStr = debug.get("port").toString(); + if(portStr != null){ + return Integer.parseInt(portStr); + } + } - + return 0; + } + public static void main(String[] args){ System.out.println(getDriver()); System.out.println(getURL()); From 490a3a68641718ae77bf06f64ac426d0ec1c173e Mon Sep 17 00:00:00 2001 From: aressu1985 <175816613@qq.com> Date: Tue, 10 Oct 2023 17:00:19 +0800 Subject: [PATCH 7/7] add pprof scripts --- pprof.sh | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 pprof.sh diff --git a/pprof.sh b/pprof.sh new file mode 100755 index 000000000..58d559a72 --- /dev/null +++ b/pprof.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +if [ $# -eq 0 ] ; then + echo "No parameters provided,please use -H to get help. " >&2 + exit 2 +fi + +PORT=6060 +SERVER="127.0.0.1" +DURATION=30 +SLEEP=60 +WORKSPACE=$(cd `dirname $0`; pwd) + +while getopts ":h:p:d:s:H" opt +do + case $opt in + h) + SERVER="${OPTARG}" + echo -e "`date +'%Y-%m-%d %H:%M:%S'` The server addr is : ${OPTARG}" + ;; + p) + expr ${OPTARG} "+" 10 &> /dev/null + if [ $? -ne 0 ]; then + echo "`date +'%Y-%m-%d %H:%M:%S'` The port [${OPTARG}] is not a number" + exit 1 + fi + PORT=${OPTARG} + echo -e "`date +'%Y-%m-%d %H:%M:%S'` The debug port is : ${OPTARG}" + ;; + d) + DURATION=${OPTARG} + echo -e "`date +'%Y-%m-%d %H:%M:%S'` The collection duration is : ${OPTARG} s" + ;; + s) + SLEEP=${OPTARG} + echo -e "`date +'%Y-%m-%d %H:%M:%S'` The sleep time for each turn is : ${OPTARG} s" + ;; + H) + echo -e "Usage: bash pprof.sh [option] [param] ...\nExcute pprof task" + echo -e " -h server address, default value is 127.0.0.1" + echo -e " -p server port, default value is 6060" + echo -e " -d the duration that pprof collection will last once, unit s" + echo -e " -s the sleeptime for each turn, unit s" + echo -e "Examples:" + echo " bash pprof.sh -h 127.0.0.1 -p 6060 -d 10" + echo "For more support,please email to sudong@matrixorigin.cn" + exit 1 + ;; + ?) + echo "Unkown parameter,please use -H to get help." + exit 1;; + esac +done + +if [ ! -d ${WORKSPACE}/report/prof/${SERVER} ] ; then + mkdir ${WORKSPACE}/report/prof/${SERVER} +fi + +time=`date +'%Y-%m-%d_%H:%M:%S'` +mkdir -p ${WORKSPACE}/report/prof/${SERVER}/${time} +curl http://${SERVER}:${PORT}/debug/pprof/goroutine?debug=2 -o ${WORKSPACE}/report/prof/${SERVER}/${time}/goroutine.log +curl http://${SERVER}:${PORT}/debug/pprof/trace?seconds=30 -o ${WORKSPACE}/report/prof/${SERVER}/${time}/trace.out +if [ $? -ne 0 ];then + echo -e "`date +'%Y-%m-%d_%H:%M:%S'` The MO debug service can not be reached, the pprof operation was failed." + exit 1 +fi +