From c0504279afce11e2106bbc5e4fe723de894607bd Mon Sep 17 00:00:00 2001 From: kolzeq Date: Wed, 30 Mar 2016 15:28:53 +0200 Subject: [PATCH] [misc] failover query relaunched correction --- .../internal/failover/AbstractMastersListener.java | 12 +++++++----- .../internal/protocol/AbstractConnectProtocol.java | 4 ++-- .../mariadb/jdbc/failover/AuroraFailoverTest.java | 2 +- .../org/mariadb/jdbc/failover/BaseMonoServer.java | 1 + .../org/mariadb/jdbc/failover/BaseReplication.java | 5 +++-- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/mariadb/jdbc/internal/failover/AbstractMastersListener.java b/src/main/java/org/mariadb/jdbc/internal/failover/AbstractMastersListener.java index 93d5fce1c..23c26a60a 100644 --- a/src/main/java/org/mariadb/jdbc/internal/failover/AbstractMastersListener.java +++ b/src/main/java/org/mariadb/jdbc/internal/failover/AbstractMastersListener.java @@ -267,8 +267,8 @@ public HandleErrorResult relaunchOperation(Method method, Object[] args) throws HandleErrorResult handleErrorResult = new HandleErrorResult(true); if (method != null) { if ("executeQuery".equals(method.getName())) { - if (args[0] instanceof String) { - String query = ((String) args[0]).toUpperCase(); + if (args[1] instanceof String) { + String query = ((String) args[1]).toUpperCase(); if (!query.equals("ALTER SYSTEM CRASH") && !query.startsWith("KILL")) { handleErrorResult.resultObject = method.invoke(currentProtocol, args); @@ -300,9 +300,11 @@ public HandleErrorResult relaunchOperation(Method method, Object[] args) throws * @return true if can be re-executed */ public boolean isQueryRelaunchable(Method method, Object[] args) { - if (method != null && "executeQuery".equals(method.getName())) { - if (args[0] instanceof String) { - return ((String) args[0]).toUpperCase().startsWith("SELECT"); + if (method != null) { + if ("executeQuery".equals(method.getName()) && args[1] instanceof String) { + return ((String) args[1]).toUpperCase().startsWith("SELECT"); + } else if ("executePreparedQuery".equals(method.getName()) && args[2] instanceof String) { + return ((String) args[2]).toUpperCase().startsWith("SELECT"); } } return false; diff --git a/src/main/java/org/mariadb/jdbc/internal/protocol/AbstractConnectProtocol.java b/src/main/java/org/mariadb/jdbc/internal/protocol/AbstractConnectProtocol.java index fb2d9dd93..cbf926f19 100644 --- a/src/main/java/org/mariadb/jdbc/internal/protocol/AbstractConnectProtocol.java +++ b/src/main/java/org/mariadb/jdbc/internal/protocol/AbstractConnectProtocol.java @@ -414,7 +414,7 @@ private void setSessionOptions() throws QueryException { private void handleConnectionPhases() throws QueryException { InputStream reader = null; try { - reader = new BufferedInputStream(socket.getInputStream()); + reader = new BufferedInputStream(socket.getInputStream(), 16384); packetFetcher = new ReadPacketFetcher(reader); writer = new PacketOutputStream(socket.getOutputStream()); @@ -439,7 +439,7 @@ private void handleConnectionPhases() throws QueryException { sslSocket.startHandshake(); socket = sslSocket; writer = new PacketOutputStream(socket.getOutputStream()); - reader = new BufferedInputStream(socket.getInputStream()); + reader = new BufferedInputStream(socket.getInputStream(), 16384); packetFetcher = new ReadPacketFetcher(reader); packetSeq++; diff --git a/src/test/java/org/mariadb/jdbc/failover/AuroraFailoverTest.java b/src/test/java/org/mariadb/jdbc/failover/AuroraFailoverTest.java index 29ad57c5b..5d68b419d 100644 --- a/src/test/java/org/mariadb/jdbc/failover/AuroraFailoverTest.java +++ b/src/test/java/org/mariadb/jdbc/failover/AuroraFailoverTest.java @@ -132,7 +132,7 @@ public void socketTimeoutTest() throws SQLException { rs.next(); // wait for the connection to time out - ps = connection.prepareStatement("SELECT sleep(5)"); + ps = connection.prepareStatement("DO sleep(5)"); // a timeout should occur here try { diff --git a/src/test/java/org/mariadb/jdbc/failover/BaseMonoServer.java b/src/test/java/org/mariadb/jdbc/failover/BaseMonoServer.java index 3075059c7..3b7a0f7b7 100644 --- a/src/test/java/org/mariadb/jdbc/failover/BaseMonoServer.java +++ b/src/test/java/org/mariadb/jdbc/failover/BaseMonoServer.java @@ -97,6 +97,7 @@ public void failoverRelaunchedWhenSelect() throws Throwable { try { st.execute("SELECT * from selectFailover" + jobId); } catch (SQLException e) { + e.printStackTrace(); Assert.fail("must not have thrown error"); } diff --git a/src/test/java/org/mariadb/jdbc/failover/BaseReplication.java b/src/test/java/org/mariadb/jdbc/failover/BaseReplication.java index bfefddf42..4c534f4ae 100644 --- a/src/test/java/org/mariadb/jdbc/failover/BaseReplication.java +++ b/src/test/java/org/mariadb/jdbc/failover/BaseReplication.java @@ -72,13 +72,14 @@ public void failoverSlaveAndMasterRewrite() throws Throwable { try { Statement stmt = connection.createStatement(); - stmt.addBatch("SELECT 1"); - stmt.addBatch("SELECT 2"); + stmt.addBatch("DO 1"); + stmt.addBatch("DO 2"); int[] resultData = stmt.executeBatch(); int secondSlaveId = getServerId(connection); assertEquals("the 2 batch queries must have been executed when failover", 2, resultData.length); assertTrue(secondSlaveId != firstSlaveId && secondSlaveId != masterServerId); } catch (SQLException e) { + e.printStackTrace(); Assert.fail(); } } finally {