Skip to content

Commit

Permalink
[CONJ-622] The option connectTimeout takes in account DriverManager g…
Browse files Browse the repository at this point in the history
…etLoginTimeout() va

(cherry picked from commit 803825e)
  • Loading branch information
rusher committed Feb 4, 2019
1 parent 1043417 commit b4c4c4d
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 2 deletions.
2 changes: 1 addition & 1 deletion documentation/use-mariadb-connector-j-driver.creole
Expand Up @@ -106,7 +106,7 @@ The following options are currently supported.
|=user|Database user name. \\//since 1.0.0//|
|=password|Password of database user.\\//since 1.0.0//|
|=rewriteBatchedStatements| For insert queries, rewrite batchedStatement to execute in a single executeQuery.\\example:\\{{{insert into ab (i) values (?)}}} with first batch values = 1, second = 2 will be rewritten\\{{{insert into ab (i) values (1), (2)}}}. \\\\If query cannot be rewriten in "multi-values", rewrite will use multi-queries : {{{INSERT INTO TABLE(col1) VALUES (?) ON DUPLICATE KEY UPDATE col2=?}}} with values [1,2] and [2,3]" will be rewritten\\{{{INSERT INTO TABLE(col1) VALUES (1) ON DUPLICATE KEY UPDATE col2=2;INSERT INTO TABLE(col1) VALUES (3) ON DUPLICATE KEY UPDATE col2=4}}}\\\\when active, the useServerPrepStmts option is set to false\\//Default: false. Since 1.1.8//|
|=connectTimeout| The connect timeout value, in milliseconds, or zero for no timeout.\\//Default: 0. Since 1.1.8//|
|=connectTimeout| The connect timeout value, in milliseconds.\\//Default: DriverManager.getLoginTimeout() value if set or 30s. Since 1.1.8//|
|=useServerPrepStmts|Queries are prepared on the server side before executing, permitting faster execution next time. \\if rewriteBatchedStatements is set to true, this option will be set to false.\\//Default: true. Since 1.3.0//|
|=useBatchMultiSend|*Not compatible with aurora* Driver will can send queries by batch. \\If disable, queries are send one by one, waiting for result before sending next one. \\If enable, queries will be send by batch corresponding to option useBatchMultiSendNumber value (default 100) or according to server variable @@max_allowed_packet if packet size cannot permit to send as many queries. Results will be read afterwhile, avoiding a lot of network latency when client and server aren't on same host. \\\\ There is 2 differents use case : JDBC executeBatch() and when option useServerPrepStmts is enable and MariaDB server >= 10.2.1, PREPARE commands will be delayed, to send PREPARE + EXECUTE in the same packet. This option if mainly effective when client is distant from server. [[./use-batch-multi-send-description.creole|more information]]\\//Default: true (false if using aurora failover). Since 1.5.0//|
\\
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/org/mariadb/jdbc/internal/util/Options.java
Expand Up @@ -53,6 +53,7 @@
package org.mariadb.jdbc.internal.util;

import java.lang.reflect.Field;
import java.sql.DriverManager;

@SuppressWarnings("ConstantConditions")
public class Options implements Cloneable {
Expand All @@ -75,7 +76,7 @@ public class Options implements Cloneable {
public boolean useFractionalSeconds = true;
public boolean pinGlobalTxToPhysicalConnection;
public String socketFactory;
public int connectTimeout = 30000;
public int connectTimeout = DriverManager.getLoginTimeout() > 0 ? DriverManager.getLoginTimeout() * 1000 : 30000;
public String pipe;
public String localSocket;
public String sharedMemory;
Expand Down
@@ -1,9 +1,11 @@
package org.mariadb.jdbc.internal.util;

import org.junit.Test;
import org.mariadb.jdbc.UrlParser;
import org.mariadb.jdbc.internal.util.constant.HaMode;

import java.lang.reflect.Field;
import java.sql.DriverManager;
import java.util.Properties;

import static org.junit.Assert.*;
Expand All @@ -26,6 +28,18 @@ public void parseDefault() throws Exception {
}
}

@Test
public void parseDefaultDriverManagerTimeout() throws Exception {
DriverManager.setLoginTimeout(2);
UrlParser parser = UrlParser.parse("jdbc:mariadb://localhost/");
assertEquals(parser.getOptions().connectTimeout, 2_000);

DriverManager.setLoginTimeout(0);

parser = UrlParser.parse("jdbc:mariadb://localhost/");
assertEquals(parser.getOptions().connectTimeout, 30_000);
}

/**
* Ensure that default value of new Options() correspond to DefaultOption Enumeration.
* @throws Exception if any value differ.
Expand Down

0 comments on commit b4c4c4d

Please sign in to comment.