From b9f687c032efae5e371b5f7b7743bc43579160d5 Mon Sep 17 00:00:00 2001 From: aressu1985 <47846308+aressu1985@users.noreply.github.com> Date: Wed, 3 Jan 2024 00:40:53 +0800 Subject: [PATCH] Add sys user sync (#158) --- lib/mo-tester-1.0-SNAPSHOT.jar | Bin 72837 -> 73177 bytes mo.yml | 2 ++ src/main/java/io/mo/db/ConnectionManager.java | 34 ++++++++++++++++++ src/main/java/io/mo/db/Executor.java | 15 +++++--- src/main/java/io/mo/util/MoConfUtil.java | 14 ++++++++ 5 files changed, 61 insertions(+), 4 deletions(-) diff --git a/lib/mo-tester-1.0-SNAPSHOT.jar b/lib/mo-tester-1.0-SNAPSHOT.jar index 1b2c09f3c9f237a277f96b6130c88f34f65a5287..55e80cfc6a0a7900f4a5077e05db1e887eed8d9b 100644 GIT binary patch delta 21017 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 DnbTBm diff --git a/mo.yml b/mo.yml index 63b07e7b7..b441d91e5 100755 --- a/mo.yml +++ b/mo.yml @@ -21,6 +21,8 @@ jdbc: user: name: "dump" password: "111" + sysuser: "dump" + syspass: "111" #debug info debug: diff --git a/src/main/java/io/mo/db/ConnectionManager.java b/src/main/java/io/mo/db/ConnectionManager.java index 4ce4fb327..6c7ad52cb 100755 --- a/src/main/java/io/mo/db/ConnectionManager.java +++ b/src/main/java/io/mo/db/ConnectionManager.java @@ -14,8 +14,13 @@ public class ConnectionManager { private static String userName = MoConfUtil.getUserName(); private static String pwd = MoConfUtil.getUserpwd(); private static String driver = MoConfUtil.getDriver(); + + private static String sysuser = MoConfUtil.getSysUserName(); + private static String syspass = MoConfUtil.getSyspwd(); private static Connection[] connections = new Connection[COMMON.DEFAULT_CONNECTION_NUM]; + private static Connection sysconn = null; + private static final Logger LOG = Logger.getLogger(ConnectionManager.class.getName()); private static boolean server_up = true; @@ -84,6 +89,35 @@ public static Connection getConnection(int index, String userName, String pwd){ server_up = false; return null; } + + public static Connection getConnectionForSys(){ + //if mo server crash,return null; + if(!server_up) return null; + + //get db connection,if failed,retry 3 times 10 s interval + for(int i = 0; i < 3; i++) { + try { + Class.forName(driver); + if (sysconn == null || sysconn.isClosed()) { + sysconn = DriverManager.getConnection(jdbcURL, sysuser, syspass); + } + return sysconn; + } catch (SQLException e) { + LOG.error("The mo-tester can not get valid conneciton from mo with[user="+userName+", pwd="+pwd+"] for sys user, and will wait 10 seconds and retry..."); + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + throw new RuntimeException(ex); + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + LOG.error("The mo-tester still can not get valid conneciton from mo for sys user, the following cases wil not be executed!"); + server_up = false; + return null; + } public static void reset(){ for(int i = 1; i < connections.length;i++){ diff --git a/src/main/java/io/mo/db/Executor.java b/src/main/java/io/mo/db/Executor.java index 4ad2969d4..0cf3fdc61 100755 --- a/src/main/java/io/mo/db/Executor.java +++ b/src/main/java/io/mo/db/Executor.java @@ -112,7 +112,7 @@ public static void run(TestScript script){ LOG.debug(String.format("[%s][row:%d][%s]Connection id had been turned from %d to %d", command.getScriptFile(),command.getPosition(),command.getCommand(), last_commit_id,command.getConn_id())); - syncCommit(connection); + syncCommit(); } last_commit_id = command.getConn_id(); @@ -220,8 +220,10 @@ public static void run(TestScript script){ LOG.warn(String.format("Failed to close connection[id=%d], but effect nothing.",command.getConn_id())); } connection = getConnection(command); - if(connection != null && !connection.isClosed()) + if(connection != null && !connection.isClosed()) { connection.setCatalog(command.getUseDB()); + syncCommit(); + } continue; } @@ -655,11 +657,16 @@ public static void dropTestDB(Connection connection,TestScript script){ dropTestDB(connection,script.getUseDB()); } - public static void syncCommit(Connection connection){ + public static void syncCommit(){ + Connection connection = ConnectionManager.getConnectionForSys(); + if(connection == null){ + LOG.error("select mo_ctl('cn','synccommit','') failed. cause: Can not get invalid connection for sys user."); + } + try { Statement statement = connection.createStatement(); statement.execute("select mo_ctl('cn','synccommit','')"); - LOG.debug("select mo_ctl('cn','synccommit','') successfully."); + LOG.info("select mo_ctl('cn','synccommit','') with sys user[" + MoConfUtil.getSysUserName() + "] successfully."); } catch (SQLException e) { LOG.error("select mo_ctl('cn','synccommit','') failed. cause: " + e.getMessage()); } diff --git a/src/main/java/io/mo/util/MoConfUtil.java b/src/main/java/io/mo/util/MoConfUtil.java index c04787424..a729765ad 100755 --- a/src/main/java/io/mo/util/MoConfUtil.java +++ b/src/main/java/io/mo/util/MoConfUtil.java @@ -67,6 +67,20 @@ public static String getUserpwd(){ return user.get("password").toString(); } + public static String getSysUserName(){ + if(conf == null) init(); + + Map user = (Map)conf.get("user"); + return user.get("sysuser").toString(); + } + + public static String getSyspwd(){ + if(conf == null) init(); + + Map user = (Map)conf.get("user"); + return user.get("syspass").toString(); + } + public static String getDefaultDatabase(){ if(conf == null) init();