Add logger warning if Hikari datasource doesn't have pool suspension configured

See gh-42937
This commit is contained in:
Dennis Kieselhorst 2024-10-29 21:48:38 +01:00 committed by Moritz Halbritter
parent 4ab80d263a
commit d4ffedf997
1 changed files with 6 additions and 1 deletions

View File

@ -109,13 +109,18 @@ public class HikariCheckpointRestoreLifecycle implements Lifecycle {
logger.info("Suspending Hikari pool"); logger.info("Suspending Hikari pool");
this.dataSource.getHikariPoolMXBean().suspendPool(); this.dataSource.getHikariPoolMXBean().suspendPool();
} }
else {
logger.warn(this.dataSource + " is not configured to allow pool suspension. "
+ "This will cause problems when the application is checkpointed. "
+ "Please configure allow-pool-suspension to fix this!");
}
closeConnections(Duration.ofMillis(this.dataSource.getConnectionTimeout() + 250)); closeConnections(Duration.ofMillis(this.dataSource.getConnectionTimeout() + 250));
} }
private void closeConnections(Duration shutdownTimeout) { private void closeConnections(Duration shutdownTimeout) {
logger.info("Evicting Hikari connections"); logger.info("Evicting Hikari connections");
this.dataSource.getHikariPoolMXBean().softEvictConnections(); this.dataSource.getHikariPoolMXBean().softEvictConnections();
logger.debug("Waiting for Hikari connections to be closed"); logger.debug(LogMessage.format("Waiting %s for Hikari connections to be closed", shutdownTimeout));
CompletableFuture<Void> allConnectionsClosed = CompletableFuture.runAsync(this::waitForConnectionsToClose); CompletableFuture<Void> allConnectionsClosed = CompletableFuture.runAsync(this::waitForConnectionsToClose);
try { try {
allConnectionsClosed.get(shutdownTimeout.toMillis(), TimeUnit.MILLISECONDS); allConnectionsClosed.get(shutdownTimeout.toMillis(), TimeUnit.MILLISECONDS);