From 25d15b48de4435bc4bd9a17f229b1b35891f3da5 Mon Sep 17 00:00:00 2001 From: Thomas Segismont Date: Thu, 24 Apr 2025 17:12:08 +0200 Subject: [PATCH] Fix connection options initialization (#1515) SqlConnectOptions defaults are initialized properly: - the default values should all be set in the init method - default values for reconnect attemps and interval are not set Also, all vendor-specific options (except for MySQL) miss the call to init in the parent options. Signed-off-by: Thomas Segismont --- .../io/vertx/db2client/DB2ConnectOptions.java | 27 +++++++------------ .../mssqlclient/MSSQLConnectOptions.java | 2 ++ .../oracleclient/OracleConnectOptions.java | 1 + .../io/vertx/pgclient/PgConnectOptions.java | 13 ++++++--- .../io/vertx/sqlclient/SqlConnectOptions.java | 23 +++++++--------- .../tck/ConnectionAutoRetryTestBase.java | 11 +++----- 6 files changed, 35 insertions(+), 42 deletions(-) diff --git a/vertx-db2-client/src/main/java/io/vertx/db2client/DB2ConnectOptions.java b/vertx-db2-client/src/main/java/io/vertx/db2client/DB2ConnectOptions.java index d3b96eec9b..22a3c604bf 100644 --- a/vertx-db2-client/src/main/java/io/vertx/db2client/DB2ConnectOptions.java +++ b/vertx-db2-client/src/main/java/io/vertx/db2client/DB2ConnectOptions.java @@ -15,33 +15,24 @@ */ package io.vertx.db2client; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.TimeUnit; -import java.util.function.Predicate; - import io.vertx.codegen.annotations.DataObject; import io.vertx.codegen.annotations.GenIgnore; import io.vertx.codegen.json.annotations.JsonGen; import io.vertx.core.json.JsonObject; -import io.vertx.core.net.ClientOptionsBase; -import io.vertx.core.net.JdkSSLEngineOptions; -import io.vertx.core.net.JksOptions; -import io.vertx.core.net.KeyCertOptions; -import io.vertx.core.net.NetClientOptions; -import io.vertx.core.net.OpenSSLEngineOptions; -import io.vertx.core.net.PemKeyCertOptions; -import io.vertx.core.net.PemTrustOptions; -import io.vertx.core.net.SSLEngineOptions; -import io.vertx.core.net.TrustOptions; +import io.vertx.core.net.*; import io.vertx.core.tracing.TracingPolicy; import io.vertx.db2client.impl.DB2ConnectionUriParser; import io.vertx.db2client.impl.drda.SQLState; import io.vertx.db2client.impl.drda.SqlCode; import io.vertx.sqlclient.SqlConnectOptions; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; + /** * Connect options for configuring {@link DB2Connection} or {@link DB2Builder}. */ @@ -276,7 +267,9 @@ public DB2ConnectOptions addProperty(String key, String value) { /** * Initialize with the default options. */ + @Override protected void init() { + super.init(); this.setHost(DEFAULT_HOST); this.setPort(DEFAULT_PORT); this.setProperties(new HashMap<>(DEFAULT_CONNECTION_ATTRIBUTES)); diff --git a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/MSSQLConnectOptions.java b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/MSSQLConnectOptions.java index 424c609791..bf152cb898 100644 --- a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/MSSQLConnectOptions.java +++ b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/MSSQLConnectOptions.java @@ -393,7 +393,9 @@ public MSSQLConnectOptions setNonProxyHosts(List nonProxyHosts) { /** * Initialize with the default options. */ + @Override protected void init() { + super.init(); this.setHost(DEFAULT_HOST); this.setPort(DEFAULT_PORT); this.setUser(DEFAULT_USER); diff --git a/vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnectOptions.java b/vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnectOptions.java index 47abcd0b38..df223ce4bf 100644 --- a/vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnectOptions.java +++ b/vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnectOptions.java @@ -345,6 +345,7 @@ public JsonObject toJson() { @Override protected void init() { + super.init(); this.setHost(DEFAULT_HOST); this.setPort(DEFAULT_PORT); this.setUser(DEFAULT_USER); diff --git a/vertx-pg-client/src/main/java/io/vertx/pgclient/PgConnectOptions.java b/vertx-pg-client/src/main/java/io/vertx/pgclient/PgConnectOptions.java index 3472a569cc..ba01b1e68f 100644 --- a/vertx-pg-client/src/main/java/io/vertx/pgclient/PgConnectOptions.java +++ b/vertx-pg-client/src/main/java/io/vertx/pgclient/PgConnectOptions.java @@ -17,15 +17,15 @@ package io.vertx.pgclient; +import io.vertx.codegen.annotations.DataObject; import io.vertx.codegen.annotations.GenIgnore; -import io.vertx.codegen.json.annotations.JsonGen; import io.vertx.codegen.annotations.Unstable; -import io.vertx.core.tracing.TracingPolicy; -import io.vertx.pgclient.impl.PgConnectionUriParser; -import io.vertx.codegen.annotations.DataObject; +import io.vertx.codegen.json.annotations.JsonGen; import io.vertx.core.buffer.Buffer; import io.vertx.core.json.JsonObject; import io.vertx.core.net.*; +import io.vertx.core.tracing.TracingPolicy; +import io.vertx.pgclient.impl.PgConnectionUriParser; import io.vertx.sqlclient.SqlConnectOptions; import java.util.Collections; @@ -191,6 +191,7 @@ public PgConnectOptions setPipeliningLimit(int pipeliningLimit) { return this; } + @Override public PgConnectOptions setCachePreparedStatements(boolean cachePreparedStatements) { return (PgConnectOptions) super.setCachePreparedStatements(cachePreparedStatements); } @@ -484,7 +485,9 @@ public PgConnectOptions setTracingPolicy(TracingPolicy tracingPolicy) { /** * Initialize with the default options. */ + @Override protected void init() { + super.init(); this.setHost(DEFAULT_HOST); this.setPort(DEFAULT_PORT); this.setUser(DEFAULT_USER); @@ -500,6 +503,7 @@ public JsonObject toJson() { return json; } + @Override @GenIgnore public SocketAddress getSocketAddress() { if (!isUsingDomainSocket()) { @@ -531,6 +535,7 @@ public int hashCode() { return result; } + @Override public boolean isUsingDomainSocket() { return this.getHost().startsWith("/"); } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/SqlConnectOptions.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/SqlConnectOptions.java index 221e7c3bcc..3bccd4c5a8 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/SqlConnectOptions.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/SqlConnectOptions.java @@ -14,22 +14,13 @@ import io.vertx.codegen.annotations.DataObject; import io.vertx.codegen.annotations.GenIgnore; import io.vertx.codegen.json.annotations.JsonGen; -import io.vertx.core.json.Json; import io.vertx.core.json.JsonObject; import io.vertx.core.net.NetClientOptions; -import io.vertx.core.net.NetClientOptionsConverter; import io.vertx.core.net.SocketAddress; import io.vertx.core.tracing.TracingPolicy; import io.vertx.sqlclient.spi.Driver; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.ServiceConfigurationError; -import java.util.ServiceLoader; +import java.util.*; import java.util.function.Predicate; /** @@ -77,10 +68,10 @@ public static SqlConnectOptions fromUri(String connectionUri) throws IllegalArgu private String user; private String password; private String database; - private boolean cachePreparedStatements = DEFAULT_CACHE_PREPARED_STATEMENTS; - private int preparedStatementCacheMaxSize = DEFAULT_PREPARED_STATEMENT_CACHE_MAX_SIZE; - private Predicate preparedStatementCacheSqlFilter = DEFAULT_PREPARED_STATEMENT_CACHE_FILTER; - private Map properties = new HashMap<>(4); + private boolean cachePreparedStatements; + private int preparedStatementCacheMaxSize; + private Predicate preparedStatementCacheSqlFilter; + private Map properties; private TracingPolicy tracingPolicy; public SqlConnectOptions() { @@ -365,6 +356,10 @@ public JsonObject toJson() { * Initialize with the default options. */ protected void init() { + cachePreparedStatements = DEFAULT_CACHE_PREPARED_STATEMENTS; + preparedStatementCacheMaxSize = DEFAULT_PREPARED_STATEMENT_CACHE_MAX_SIZE; + preparedStatementCacheSqlFilter = DEFAULT_PREPARED_STATEMENT_CACHE_FILTER; + properties = new HashMap<>(4); } /** diff --git a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/ConnectionAutoRetryTestBase.java b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/ConnectionAutoRetryTestBase.java index ce47498905..a83354a2b3 100644 --- a/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/ConnectionAutoRetryTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/ConnectionAutoRetryTestBase.java @@ -30,7 +30,10 @@ import org.junit.Test; import org.junit.runner.RunWith; -import java.util.*; +import java.util.ArrayDeque; +import java.util.HashMap; +import java.util.Map; +import java.util.Queue; import java.util.concurrent.atomic.AtomicInteger; @RunWith(VertxUnitRunner.class) @@ -57,7 +60,6 @@ public void tearDown(TestContext ctx) { @Test public void testConnSuccessWithoutRetry(TestContext ctx) { options.setReconnectAttempts(3); - options.setReconnectInterval(1000); UnstableProxyServer unstableProxyServer = new UnstableProxyServer(0); unstableProxyServer.initialize(options, ctx.asyncAssertSuccess(v -> { initialConnector(unstableProxyServer.port()); @@ -71,7 +73,6 @@ public void testConnSuccessWithoutRetry(TestContext ctx) { @Test public void testPoolSuccessWithoutRetry(TestContext ctx) { options.setReconnectAttempts(3); - options.setReconnectInterval(1000); UnstableProxyServer unstableProxyServer = new UnstableProxyServer(0); unstableProxyServer.initialize(options, ctx.asyncAssertSuccess(v -> { initialConnector(unstableProxyServer.port()); @@ -84,7 +85,6 @@ public void testPoolSuccessWithoutRetry(TestContext ctx) { @Test public void testConnExceedingRetryLimit(TestContext ctx) { options.setReconnectAttempts(1); - options.setReconnectInterval(1000); UnstableProxyServer unstableProxyServer = new UnstableProxyServer(2); unstableProxyServer.initialize(options, ctx.asyncAssertSuccess(v -> { initialConnector(unstableProxyServer.port()); @@ -96,7 +96,6 @@ public void testConnExceedingRetryLimit(TestContext ctx) { @Test public void testPoolExceedingRetryLimit(TestContext ctx) { options.setReconnectAttempts(1); - options.setReconnectInterval(1000); UnstableProxyServer unstableProxyServer = new UnstableProxyServer(2); unstableProxyServer.initialize(options, ctx.asyncAssertSuccess(v -> { initialConnector(unstableProxyServer.port()); @@ -108,7 +107,6 @@ public void testPoolExceedingRetryLimit(TestContext ctx) { @Test public void testConnRetrySuccess(TestContext ctx) { options.setReconnectAttempts(1); - options.setReconnectInterval(1000); UnstableProxyServer unstableProxyServer = new UnstableProxyServer(1); unstableProxyServer.initialize(options, ctx.asyncAssertSuccess(v -> { initialConnector(unstableProxyServer.port()); @@ -121,7 +119,6 @@ public void testConnRetrySuccess(TestContext ctx) { @Test public void testPoolRetrySuccess(TestContext ctx) { options.setReconnectAttempts(1); - options.setReconnectInterval(1000); UnstableProxyServer unstableProxyServer = new UnstableProxyServer(1); unstableProxyServer.initialize(options, ctx.asyncAssertSuccess(v -> { initialConnector(unstableProxyServer.port());