diff --git a/src/main/java/com/zaxxer/hikari/HikariConfig.java b/src/main/java/com/zaxxer/hikari/HikariConfig.java index 031a815b..b74f66cf 100644 --- a/src/main/java/com/zaxxer/hikari/HikariConfig.java +++ b/src/main/java/com/zaxxer/hikari/HikariConfig.java @@ -50,21 +50,21 @@ public class HikariConfig implements HikariConfigMXBean { private static final Logger LOGGER = LoggerFactory.getLogger(HikariConfig.class); - private static final int CONNECTION_TIMEOUT = (int) SECONDS.toMillis(30); - private static final int VALIDATION_TIMEOUT = (int) SECONDS.toMillis(5); - private static final int IDLE_TIMEOUT = (int) MINUTES.toMillis(10); - private static final int MAX_LIFETIME = (int) MINUTES.toMillis(30); + private static final long CONNECTION_TIMEOUT = SECONDS.toMillis(30); + private static final long VALIDATION_TIMEOUT = SECONDS.toMillis(5); + private static final long IDLE_TIMEOUT = MINUTES.toMillis(10); + private static final long MAX_LIFETIME = MINUTES.toMillis(30); private static final AtomicInteger POOL_NUMBER; private static boolean unitTest; // Properties changeable at runtime through the MBean // - private volatile int connectionTimeout; - private volatile int validationTimeout; - private volatile int idleTimeout; - private volatile int leakDetectionThreshold; - private volatile int maxLifetime; + private volatile long connectionTimeout; + private volatile long validationTimeout; + private volatile long idleTimeout; + private volatile long leakDetectionThreshold; + private volatile long maxLifetime; private volatile int maxPoolSize; private volatile int minIdle; @@ -227,14 +227,14 @@ public class HikariConfig implements HikariConfigMXBean /** {@inheritDoc} */ @Override - public int getConnectionTimeout() + public long getConnectionTimeout() { return connectionTimeout; } /** {@inheritDoc} */ @Override - public void setConnectionTimeout(int connectionTimeoutMs) + public void setConnectionTimeout(long connectionTimeoutMs) { if (connectionTimeoutMs == 0) { this.connectionTimeout = Integer.MAX_VALUE; @@ -253,14 +253,14 @@ public class HikariConfig implements HikariConfigMXBean /** {@inheritDoc} */ @Override - public int getValidationTimeout() + public long getValidationTimeout() { return validationTimeout; } /** {@inheritDoc} */ @Override - public void setValidationTimeout(int validationTimeoutMs) + public void setValidationTimeout(long validationTimeoutMs) { if (validationTimeoutMs < 250) { throw new IllegalArgumentException("validationTimeout cannot be less than 250ms"); @@ -350,14 +350,14 @@ public class HikariConfig implements HikariConfigMXBean /** {@inheritDoc} */ @Override - public int getIdleTimeout() + public long getIdleTimeout() { return idleTimeout; } /** {@inheritDoc} */ @Override - public void setIdleTimeout(int idleTimeoutMs) + public void setIdleTimeout(long idleTimeoutMs) { if (idleTimeoutMs < 0) { throw new IllegalArgumentException("idleTimeout cannot be negative"); @@ -588,28 +588,28 @@ public class HikariConfig implements HikariConfigMXBean /** {@inheritDoc} */ @Override - public int getLeakDetectionThreshold() + public long getLeakDetectionThreshold() { return leakDetectionThreshold; } /** {@inheritDoc} */ @Override - public void setLeakDetectionThreshold(int leakDetectionThresholdMs) + public void setLeakDetectionThreshold(long leakDetectionThresholdMs) { this.leakDetectionThreshold = leakDetectionThresholdMs; } /** {@inheritDoc} */ @Override - public int getMaxLifetime() + public long getMaxLifetime() { return maxLifetime; } /** {@inheritDoc} */ @Override - public void setMaxLifetime(int maxLifetimeMs) + public void setMaxLifetime(long maxLifetimeMs) { this.maxLifetime = maxLifetimeMs; } @@ -842,7 +842,7 @@ public class HikariConfig implements HikariConfigMXBean if (leakDetectionThreshold > 0 && !unitTest) { if (leakDetectionThreshold < SECONDS.toMillis(2) || (leakDetectionThreshold > maxLifetime && maxLifetime > 0)) { LOGGER.warn("{} - leakDetectionThreshold is less than 2000ms or more than maxLifetime, disabling it.", poolName); - leakDetectionThreshold = 0; + leakDetectionThreshold = 0L; } } diff --git a/src/main/java/com/zaxxer/hikari/HikariConfigMXBean.java b/src/main/java/com/zaxxer/hikari/HikariConfigMXBean.java index 7028f50c..00fefc97 100644 --- a/src/main/java/com/zaxxer/hikari/HikariConfigMXBean.java +++ b/src/main/java/com/zaxxer/hikari/HikariConfigMXBean.java @@ -30,7 +30,7 @@ public interface HikariConfigMXBean * * @return the connection timeout in milliseconds */ - int getConnectionTimeout(); + long getConnectionTimeout(); /** * Set the maximum number of milliseconds that a client will wait for a connection from the pool. If this @@ -39,7 +39,7 @@ public interface HikariConfigMXBean * * @param connectionTimeoutMs the connection timeout in milliseconds */ - void setConnectionTimeout(int connectionTimeoutMs); + void setConnectionTimeout(long connectionTimeoutMs); /** * Get the maximum number of milliseconds that the pool will wait for a connection to be validated as @@ -47,7 +47,7 @@ public interface HikariConfigMXBean * * @return the validation timeout in milliseconds */ - int getValidationTimeout(); + long getValidationTimeout(); /** * Sets the maximum number of milliseconds that the pool will wait for a connection to be validated as @@ -55,7 +55,7 @@ public interface HikariConfigMXBean * * @param validationTimeoutMs the validation timeout in milliseconds */ - void setValidationTimeout(int validationTimeoutMs); + void setValidationTimeout(long validationTimeoutMs); /** * This property controls the maximum amount of time (in milliseconds) that a connection is allowed to sit @@ -65,7 +65,7 @@ public interface HikariConfigMXBean * * @return the idle timeout in milliseconds */ - int getIdleTimeout(); + long getIdleTimeout(); /** * This property controls the maximum amount of time (in milliseconds) that a connection is allowed to sit @@ -75,7 +75,7 @@ public interface HikariConfigMXBean * * @param idleTimeoutMs the idle timeout in milliseconds */ - void setIdleTimeout(int idleTimeoutMs); + void setIdleTimeout(long idleTimeoutMs); /** * This property controls the amount of time that a connection can be out of the pool before a message is @@ -83,7 +83,7 @@ public interface HikariConfigMXBean * * @return the connection leak detection threshold in milliseconds */ - int getLeakDetectionThreshold(); + long getLeakDetectionThreshold(); /** * This property controls the amount of time that a connection can be out of the pool before a message is @@ -91,7 +91,7 @@ public interface HikariConfigMXBean * * @param leakDetectionThresholdMs the connection leak detection threshold in milliseconds */ - void setLeakDetectionThreshold(int leakDetectionThresholdMs); + void setLeakDetectionThreshold(long leakDetectionThresholdMs); /** * This property controls the maximum lifetime of a connection in the pool. When a connection reaches this @@ -100,7 +100,7 @@ public interface HikariConfigMXBean * * @return the maximum connection lifetime in milliseconds */ - int getMaxLifetime(); + long getMaxLifetime(); /** * This property controls the maximum lifetime of a connection in the pool. When a connection reaches this @@ -109,7 +109,7 @@ public interface HikariConfigMXBean * * @param maxLifetimeMs the maximum connection lifetime in milliseconds */ - void setMaxLifetime(int maxLifetimeMs); + void setMaxLifetime(long maxLifetimeMs); /** * The property controls the maximum size that the pool is allowed to reach, including both idle and in-use diff --git a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index 4cef0a82..76841acb 100644 --- a/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -565,7 +565,7 @@ public class HikariPool extends PoolBase implements HikariPoolMXBean, IBagStateL // failed to get connection from db, sleep and retry quietlySleep(sleepBackoff); - sleepBackoff = Math.min(SECONDS.toMillis(10), Math.min(connectionTimeout, (int) (sleepBackoff * 1.3))); + sleepBackoff = Math.min(SECONDS.toMillis(10), Math.min(connectionTimeout, (long) (sleepBackoff * 1.3))); } // Pool is suspended or shutdown or at max size return Boolean.FALSE; diff --git a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java index cf629fea..fbf286e0 100644 --- a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java +++ b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java @@ -42,8 +42,8 @@ abstract class PoolBase protected final HikariConfig config; protected final String poolName; - protected int connectionTimeout; - protected int validationTimeout; + protected long connectionTimeout; + protected long validationTimeout; private static final String[] RESET_STATES = {"readOnly", "autoCommit", "isolation", "catalog", "netTimeout"}; private static final int UNINITIALIZED = -1; @@ -110,7 +110,7 @@ abstract class PoolBase try { LOGGER.debug("{} - Closing connection {}: {}", poolName, connection, closureReason); try { - setNetworkTimeout(connection, (int) SECONDS.toMillis(15)); + setNetworkTimeout(connection, SECONDS.toMillis(15)); } finally { connection.close(); // continue with the close even if setNetworkTimeout() throws @@ -126,14 +126,14 @@ abstract class PoolBase { try { if (isUseJdbc4Validation) { - return connection.isValid((int) MILLISECONDS.toSeconds(Math.max(1000, validationTimeout))); + return connection.isValid((int) MILLISECONDS.toSeconds(Math.max(1000L, validationTimeout))); } setNetworkTimeout(connection, validationTimeout); try (Statement statement = connection.createStatement()) { if (isNetworkTimeoutSupported != TRUE) { - setQueryTimeout(statement, (int) MILLISECONDS.toSeconds(Math.max(1000, validationTimeout))); + setQueryTimeout(statement, (int) MILLISECONDS.toSeconds(Math.max(1000L, validationTimeout))); } statement.execute(config.getConnectionTestQuery()); @@ -424,12 +424,12 @@ abstract class PoolBase * @param timeoutMs the number of milliseconds before timeout * @return the pre-existing network timeout value */ - private int getAndSetNetworkTimeout(final Connection connection, final int timeoutMs) + private int getAndSetNetworkTimeout(final Connection connection, final long timeoutMs) { if (isNetworkTimeoutSupported != FALSE) { try { final int originalTimeout = connection.getNetworkTimeout(); - connection.setNetworkTimeout(netTimeoutExecutor, timeoutMs); + connection.setNetworkTimeout(netTimeoutExecutor, (int) timeoutMs); isNetworkTimeoutSupported = TRUE; return originalTimeout; } @@ -452,10 +452,10 @@ abstract class PoolBase * @param timeoutMs the number of milliseconds before timeout * @throws SQLException throw if the connection.setNetworkTimeout() call throws */ - private void setNetworkTimeout(final Connection connection, final int timeoutMs) throws SQLException + private void setNetworkTimeout(final Connection connection, final long timeoutMs) throws SQLException { if (isNetworkTimeoutSupported == TRUE) { - connection.setNetworkTimeout(netTimeoutExecutor, timeoutMs); + connection.setNetworkTimeout(netTimeoutExecutor, (int) timeoutMs); } } @@ -510,11 +510,11 @@ abstract class PoolBase * @param dataSource the DataSource * @param connectionTimeout the timeout in milliseconds */ - private void setLoginTimeout(final DataSource dataSource, final int connectionTimeout) + private void setLoginTimeout(final DataSource dataSource, final long connectionTimeout) { if (connectionTimeout != Integer.MAX_VALUE) { try { - dataSource.setLoginTimeout((int) MILLISECONDS.toSeconds(Math.max(1000, connectionTimeout))); + dataSource.setLoginTimeout((int) MILLISECONDS.toSeconds(Math.max(1000L, connectionTimeout))); } catch (Throwable e) { LOGGER.warn("{} - Failed to set login timeout for data source. ({})", poolName, e.getMessage()); diff --git a/src/main/java/com/zaxxer/hikari/pool/ProxyLeakTask.java b/src/main/java/com/zaxxer/hikari/pool/ProxyLeakTask.java index 6b5032b2..a8f280e5 100644 --- a/src/main/java/com/zaxxer/hikari/pool/ProxyLeakTask.java +++ b/src/main/java/com/zaxxer/hikari/pool/ProxyLeakTask.java @@ -36,7 +36,7 @@ class ProxyLeakTask implements Runnable private static final ProxyLeakTask NO_LEAK; private ScheduledExecutorService executorService; - private int leakDetectionThreshold; + private long leakDetectionThreshold; private ScheduledFuture scheduledFuture; private String connectionName; private Exception exception; @@ -49,7 +49,7 @@ class ProxyLeakTask implements Runnable }; } - ProxyLeakTask(final int leakDetectionThreshold, final ScheduledExecutorService executorService) + ProxyLeakTask(final long leakDetectionThreshold, final ScheduledExecutorService executorService) { this.executorService = executorService; this.leakDetectionThreshold = leakDetectionThreshold; @@ -71,7 +71,7 @@ class ProxyLeakTask implements Runnable return (leakDetectionThreshold == 0) ? NO_LEAK : new ProxyLeakTask(this, bagEntry); } - void updateLeakDetectionThreshold(final int leakDetectionThreshold) + void updateLeakDetectionThreshold(final long leakDetectionThreshold) { this.leakDetectionThreshold = leakDetectionThreshold; } diff --git a/src/test/java/com/zaxxer/hikari/pool/MiscTest.java b/src/test/java/com/zaxxer/hikari/pool/MiscTest.java index bed288a7..6cf3bc2e 100644 --- a/src/test/java/com/zaxxer/hikari/pool/MiscTest.java +++ b/src/test/java/com/zaxxer/hikari/pool/MiscTest.java @@ -98,7 +98,7 @@ public class MiscTest config.setPoolName("test"); config.setThreadFactory(Executors.defaultThreadFactory()); config.setMetricRegistry(null); - config.setLeakDetectionThreshold((int) TimeUnit.SECONDS.toMillis(1)); + config.setLeakDetectionThreshold(TimeUnit.SECONDS.toMillis(1)); config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); TestElf.setConfigUnitTest(true); @@ -108,9 +108,9 @@ public class MiscTest TestElf.getPool(ds).logPoolState(); Connection connection = ds.getConnection(); - UtilityElf.quietlySleep((int) TimeUnit.SECONDS.toMillis(4)); + UtilityElf.quietlySleep(TimeUnit.SECONDS.toMillis(4)); connection.close(); - UtilityElf.quietlySleep((int) TimeUnit.SECONDS.toMillis(1)); + UtilityElf.quietlySleep(TimeUnit.SECONDS.toMillis(1)); ps.close(); String s = new String(baos.toByteArray()); Assert.assertNotNull("Exception string was null", s); diff --git a/src/test/java/com/zaxxer/hikari/pool/PostgresTest.java b/src/test/java/com/zaxxer/hikari/pool/PostgresTest.java index c42ed82a..4867445a 100644 --- a/src/test/java/com/zaxxer/hikari/pool/PostgresTest.java +++ b/src/test/java/com/zaxxer/hikari/pool/PostgresTest.java @@ -47,8 +47,8 @@ public class PostgresTest config.setMinimumIdle(3); config.setMaximumPoolSize(10); config.setConnectionTimeout(3000); - config.setIdleTimeout((int) TimeUnit.SECONDS.toMillis(10)); - config.setValidationTimeout((int) TimeUnit.SECONDS.toMillis(2)); + config.setIdleTimeout(TimeUnit.SECONDS.toMillis(10)); + config.setValidationTimeout(TimeUnit.SECONDS.toMillis(2)); config.setJdbcUrl("jdbc:pgsql://localhost:5432/test"); config.setUsername("brettw"); @@ -82,7 +82,7 @@ public class PostgresTest config.setMinimumIdle(3); config.setMaximumPoolSize(10); config.setConnectionTimeout(1000); - config.setIdleTimeout((int) TimeUnit.SECONDS.toMillis(60)); + config.setIdleTimeout(TimeUnit.SECONDS.toMillis(60)); config.setJdbcUrl("jdbc:pgsql://localhost:5432/test"); config.setUsername("brettw"); @@ -127,7 +127,7 @@ public class PostgresTest config.setMinimumIdle(3); config.setMaximumPoolSize(10); config.setConnectionTimeout(1000); - config.setIdleTimeout((int) TimeUnit.SECONDS.toMillis(60)); + config.setIdleTimeout(TimeUnit.SECONDS.toMillis(60)); config.setJdbcUrl("jdbc:pgsql://localhost:5432/test"); config.setUsername("brettw"); @@ -162,8 +162,8 @@ public class PostgresTest config.setMinimumIdle(0); config.setMaximumPoolSize(15); config.setConnectionTimeout(10000); - config.setIdleTimeout((int) TimeUnit.MINUTES.toMillis(1)); - config.setMaxLifetime((int) TimeUnit.MINUTES.toMillis(2)); + config.setIdleTimeout(TimeUnit.MINUTES.toMillis(1)); + config.setMaxLifetime(TimeUnit.MINUTES.toMillis(2)); config.setRegisterMbeans(true); config.setJdbcUrl("jdbc:postgresql://localhost:5432/netld"); diff --git a/src/test/java/com/zaxxer/hikari/pool/TestConnections.java b/src/test/java/com/zaxxer/hikari/pool/TestConnections.java index 4b79f31d..b3f5d130 100644 --- a/src/test/java/com/zaxxer/hikari/pool/TestConnections.java +++ b/src/test/java/com/zaxxer/hikari/pool/TestConnections.java @@ -71,7 +71,7 @@ public class TestConnections config.setConnectionInitSql("SELECT 1"); config.setReadOnly(true); config.setConnectionTimeout(2500); - config.setLeakDetectionThreshold((int) TimeUnit.SECONDS.toMillis(30)); + config.setLeakDetectionThreshold(TimeUnit.SECONDS.toMillis(30)); config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); try (HikariDataSource ds = new HikariDataSource(config)) { @@ -488,7 +488,7 @@ public class TestConnections HikariConfig config = new HikariConfig(); config.setMinimumIdle(1); config.setMaximumPoolSize(2); - config.setConnectionTimeout((int) TimeUnit.SECONDS.toMillis(3)); + config.setConnectionTimeout(TimeUnit.SECONDS.toMillis(3)); config.setConnectionTestQuery("VALUES 1"); config.setInitializationFailFast(false); config.setDataSource(stubDataSource); diff --git a/src/test/java/com/zaxxer/hikari/pool/TestProxies.java b/src/test/java/com/zaxxer/hikari/pool/TestProxies.java index b7418770..2375fd9c 100644 --- a/src/test/java/com/zaxxer/hikari/pool/TestProxies.java +++ b/src/test/java/com/zaxxer/hikari/pool/TestProxies.java @@ -98,7 +98,7 @@ public class TestProxies HikariConfig config = new HikariConfig(); config.setMinimumIdle(0); config.setMaximumPoolSize(1); - config.setConnectionTimeout((int) TimeUnit.SECONDS.toMillis(1)); + config.setConnectionTimeout(TimeUnit.SECONDS.toMillis(1)); config.setConnectionTestQuery("VALUES 1"); config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); diff --git a/src/test/java/com/zaxxer/hikari/pool/TestValidation.java b/src/test/java/com/zaxxer/hikari/pool/TestValidation.java index 97ad6318..d6742d67 100644 --- a/src/test/java/com/zaxxer/hikari/pool/TestValidation.java +++ b/src/test/java/com/zaxxer/hikari/pool/TestValidation.java @@ -110,7 +110,7 @@ public class TestValidation { try { HikariConfig config = new HikariConfig(); - config.setConnectionTimeout(10); + config.setConnectionTimeout(10L); Assert.fail(); } catch (IllegalArgumentException ise) { @@ -123,7 +123,7 @@ public class TestValidation { try { HikariConfig config = new HikariConfig(); - config.setIdleTimeout(-1); + config.setIdleTimeout(-1L); Assert.fail("negative idle timeout accepted"); } catch (IllegalArgumentException ise) { @@ -140,7 +140,7 @@ public class TestValidation HikariConfig config = new HikariConfig(); config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); - config.setIdleTimeout((int) TimeUnit.SECONDS.toMillis(5)); + config.setIdleTimeout(TimeUnit.SECONDS.toMillis(5)); config.validate(); Assert.assertTrue(new String(baos.toByteArray()).contains("less than 10000ms")); } @@ -154,8 +154,8 @@ public class TestValidation HikariConfig config = new HikariConfig(); config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); - config.setMaxLifetime((int) TimeUnit.MINUTES.toMillis(2)); - config.setIdleTimeout((int) TimeUnit.MINUTES.toMillis(3)); + config.setMaxLifetime(TimeUnit.MINUTES.toMillis(2)); + config.setIdleTimeout(TimeUnit.MINUTES.toMillis(3)); config.validate(); String s = new String(baos.toByteArray()); @@ -194,9 +194,9 @@ public class TestValidation try { HikariConfig config = new HikariConfig(); config.setConnectionTimeout(Integer.MAX_VALUE); - config.setIdleTimeout(1000); - config.setLeakDetectionThreshold(1000); - config.setMaxLifetime(-1); + config.setIdleTimeout(1000L); + config.setLeakDetectionThreshold(1000L); + config.setMaxLifetime(-1L); config.validate(); Assert.fail(); } @@ -210,7 +210,7 @@ public class TestValidation { HikariConfig config = new HikariConfig(); config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); - config.setLeakDetectionThreshold(1000); + config.setLeakDetectionThreshold(1000L); config.validate(); Assert.assertEquals(0L, config.getLeakDetectionThreshold()); }