From 045197edf1c74865971393bd4bbf8c8e33551cc5 Mon Sep 17 00:00:00 2001 From: Dmitriy Tverdiakov Date: Wed, 3 Sep 2025 14:54:08 +0100 Subject: [PATCH] fix(acquisition): avoid infinite connection timeout if there is a limit As acquisition timeout effectively includes connection timeout, the latter should not be left infinite when the former is limited. --- .../org/neo4j/driver/internal/DriverFactory.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/driver/src/main/java/org/neo4j/driver/internal/DriverFactory.java b/driver/src/main/java/org/neo4j/driver/internal/DriverFactory.java index 5f6e3e88c..8e4e70d29 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/DriverFactory.java +++ b/driver/src/main/java/org/neo4j/driver/internal/DriverFactory.java @@ -366,6 +366,15 @@ private BoltConnectionSourceFactory createPooledBoltConnectionSource( boltConnectionProviderFactory); var listeningBoltConnectionProvider = BoltConnectionListener.listeningBoltConnectionProvider( boltConnectionProvider, boltConnectionListener); + var connectTimeoutMillisAdjusted = connectTimeoutMillis; + var connectionAcquisitionTimeoutMillis = config.connectionAcquisitionTimeoutMillis(); + if (connectTimeoutMillisAdjusted == 0 && connectionAcquisitionTimeoutMillis > 0) { + connectTimeoutMillisAdjusted = (int) connectionAcquisitionTimeoutMillis; + if (connectTimeoutMillisAdjusted != connectionAcquisitionTimeoutMillis) { + throw new IllegalStateException( + "Failed to determine connection timeout from acquisition timeout due to overflow, set connection timeout to non zero value"); + } + } return new PooledBoltConnectionSource( loggingProvider, clock, @@ -374,14 +383,14 @@ private BoltConnectionSourceFactory createPooledBoltConnectionSource( authTokenManager, createSecurityPlanSupplierWithHostname(securityPlanSupplier, expectedVerificationHostname), config.maxConnectionPoolSize(), - config.connectionAcquisitionTimeoutMillis(), + connectionAcquisitionTimeoutMillis, config.maxConnectionLifetimeMillis(), config.idleTimeBeforeConnectionTest(), observationProvider, routingContextAddress, boltAgent, userAgent, - connectTimeoutMillis, + connectTimeoutMillisAdjusted, notificationConfig, PooledBoltConnectionSource.TimeoutPolicy.DEFAULT); };