quarkusio / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
13.64k stars 2.64k forks source link

Allow datasources to be enabled/disabled at runtime #16485

Closed dhoffer closed 1 month ago

dhoffer commented 3 years ago

Description

Add support in Quarkus for data sources to be enabled/disabled.

Currently Quarkus supports multiple named datasources which is good, and we can switch between them at runtime with our apps configuration which is also good. Regarding the following I will refer to these as datasources A & B.

However currently Quarkus generates a nasty stack trace for the datasource(s) that are not currently used. E.g. if our application is configured to use A and not B, it will generate the following stack trace when it tries to connect to B.

What we want Quarkus to add is the following property: quarkus.datasource.'named'.enabled=true/false

This should default to true if not provided. This must be a runtime configurable property.

If the above value is false then Quarkus would not attempt to connect to the datasource at runtime.

Here is the online discussion regarding this new feature: https://groups.google.com/g/quarkus-dev/c/Alz3lP7vbFM/m/S06Mzr3mAgAJ

Current stack trace:

2021-04-07 15:56:39,056 WARN (main) [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService()] HHH000342: Could not obtain connection to query metadata: java.sql.SQLException: [Amazon]HiveJDBCDriver Error initialized or created transport for authentication: java.net.UnknownHostException: junk-host. at com.amazon.hiveserver2.hivecommon.api.HiveServer2ClientFactory.createTransport(Unknown Source) at com.amazon.hiveserver2.hivecommon.api.ServiceDiscoveryFactory.createClient(Unknown Source) at com.amazon.hiveserver2.hivecommon.core.HiveJDBCCommonConnection.establishConnection(Unknown Source) at com.amazon.hiveserver2.jdbc.core.LoginTimeoutConnection.connect(Unknown Source) at com.amazon.hiveserver2.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source) at com.amazon.hiveserver2.jdbc.common.AbstractDriver.connect(Unknown Source) at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:200) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:452) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:434) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:65) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) Caused by: com.amazon.hiveserver2.support.exceptions.GeneralException: [Amazon]HiveJDBCDriver Error initialized or created transport for authentication: java.net.UnknownHostException: junk-host. ... 13 more Caused by: com.amazon.hive.jdbc41.internal.apache.thrift.transport.TTransportException: java.net.UnknownHostException: junk-host at com.amazon.hive.jdbc41.internal.apache.thrift.transport.TSocket.open(TSocket.java:185) at com.amazon.hive.jdbc41.internal.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:248) at com.amazon.hive.jdbc41.internal.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37) at com.amazon.hiveserver2.hivecommon.api.HiveServer2ClientFactory.createTransport(Unknown Source) at com.amazon.hiveserver2.hivecommon.api.ServiceDiscoveryFactory.createClient(Unknown Source) at com.amazon.hiveserver2.hivecommon.core.HiveJDBCCommonConnection.establishConnection(Unknown Source) at com.amazon.hiveserver2.jdbc.core.LoginTimeoutConnection.connect(Unknown Source) at com.amazon.hiveserver2.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source) at com.amazon.hiveserver2.jdbc.common.AbstractDriver.connect(Unknown Source) at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:200) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:452) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:434) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:65) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.net.UnknownHostException: junk-host at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:220) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) at java.base/java.net.Socket.connect(Socket.java:609) at com.amazon.hive.jdbc41.internal.apache.thrift.transport.TSocket.open(TSocket.java:180) ... 16 more

2021-04-07 15:56:43,599 WARN (main) [org.hibernate.engine.jdbc.spi.TypeInfo.extractTypeInfo()] HHH000362: Unable to retrieve type info result set : java.sql.SQLException: Could not find the "XcoreXamazonathenaX200X7522.fza@3b5365b8". 2021-04-07 15:56:43,601 WARN (main) [org.hibernate.engine.jdbc.spi.TypeInfo.extractTypeInfo()] HHH000362: Unable to retrieve type info result set : java.sql.SQLException: Could not find the "XcoreXamazonathenaX200X7522.fza@2b31269d". 2021-04-07 15:56:45,214 WARN (main) [org.hibernate.engine.jdbc.spi.TypeInfo.extractTypeInfo()] HHH000362: Unable to retrieve type info result set : java.sql.SQLException: Could not find the "XcoreXamazonathenaX200X7522.fza@2eda15dd". 2021-04-07 15:56:45,215 WARN (main) [org.hibernate.engine.jdbc.spi.TypeInfo.extractTypeInfo()] HHH000362: Unable to retrieve type info result set : java.sql.SQLException: Could not find the "XcoreXamazonathenaX200X7522.fza@76d3e6e1". 2021-04-07 15:56:45,921 WARN (agroal-21) [io.agroal.pool.onWarning()] Datasource 'emrDS': [Amazon]HiveJDBCDriver Error initialized or created transport for authentication: java.net.UnknownHostException: junk-host. 2021-04-07 15:56:45,922 WARN (main) [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService()] HHH000342: Could not obtain connection to query metadata: java.sql.SQLException: [Amazon]HiveJDBCDriver Error initialized or created transport for authentication: java.net.UnknownHostException: junk-host. at com.amazon.hiveserver2.hivecommon.api.HiveServer2ClientFactory.createTransport(Unknown Source) at com.amazon.hiveserver2.hivecommon.api.ServiceDiscoveryFactory.createClient(Unknown Source) at com.amazon.hiveserver2.hivecommon.core.HiveJDBCCommonConnection.establishConnection(Unknown Source) at com.amazon.hiveserver2.jdbc.core.LoginTimeoutConnection.connect(Unknown Source) at com.amazon.hiveserver2.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source) at com.amazon.hiveserver2.jdbc.common.AbstractDriver.connect(Unknown Source) at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:200) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:452) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:434) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:65) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) Caused by: com.amazon.hiveserver2.support.exceptions.GeneralException: [Amazon]HiveJDBCDriver Error initialized or created transport for authentication: java.net.UnknownHostException: junk-host. ... 13 more Caused by: com.amazon.hive.jdbc41.internal.apache.thrift.transport.TTransportException: java.net.UnknownHostException: junk-host at com.amazon.hive.jdbc41.internal.apache.thrift.transport.TSocket.open(TSocket.java:185) at com.amazon.hive.jdbc41.internal.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:248) at com.amazon.hive.jdbc41.internal.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37) at com.amazon.hiveserver2.hivecommon.api.HiveServer2ClientFactory.createTransport(Unknown Source) at com.amazon.hiveserver2.hivecommon.api.ServiceDiscoveryFactory.createClient(Unknown Source) at com.amazon.hiveserver2.hivecommon.core.HiveJDBCCommonConnection.establishConnection(Unknown Source) at com.amazon.hiveserver2.jdbc.core.LoginTimeoutConnection.connect(Unknown Source) at com.amazon.hiveserver2.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source) at com.amazon.hiveserver2.jdbc.common.AbstractDriver.connect(Unknown Source) at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:200) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:452) at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:434) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:65) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.net.UnknownHostException: junk-host at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:220) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) at java.base/java.net.Socket.connect(Socket.java:609) at com.amazon.hive.jdbc41.internal.apache.thrift.transport.TSocket.open(TSocket.java:180) ... 16 more

quarkus-bot[bot] commented 3 years ago

/cc @DavideD, @Sanne, @gavinking, @gsmet, @mswatosh, @yrodiere

yrodiere commented 1 month ago

I think this was solved in #38108, so I'll close this issue.

Feel free to comment or open another issue (ideally with a reproducer) if something is wrong.