r2dbc / r2dbc-pool

Connection Pooling for Reactive Relational Database Connectivity
https://r2dbc.io
Apache License 2.0
332 stars 55 forks source link

mysql delegating driver not found #135

Closed sumitsum closed 2 years ago

sumitsum commented 3 years ago

URI: r2dbc:pool:mysql://localhost:3306/mytestdb?zeroDateTimeBehavior=convertToNull

Stack trace:

java.lang.IllegalArgumentException: Could not find delegating driver [mysql]
    at io.r2dbc.pool.PoolingConnectionFactoryProvider.buildConfiguration(PoolingConnectionFactoryProvider.java:177)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ⇢ Handler com.appsmith.server.controllers.DatasourceController#testDatasource(Datasource) [DispatcherHandler]
Stack trace:
        at io.r2dbc.pool.PoolingConnectionFactoryProvider.buildConfiguration(PoolingConnectionFactoryProvider.java:177)
        at io.r2dbc.pool.PoolingConnectionFactoryProvider.create(PoolingConnectionFactoryProvider.java:153)
        at io.r2dbc.pool.PoolingConnectionFactoryProvider.create(PoolingConnectionFactoryProvider.java:42)
        at io.r2dbc.spi.ConnectionFactories.find(ConnectionFactories.java:112)
        at io.r2dbc.spi.ConnectionFactories.get(ConnectionFactories.java:142)
        at com.external.plugins.MySqlPlugin$MySqlPluginExecutor.datasourceCreate(MySqlPlugin.java:567)
        at com.external.plugins.MySqlPlugin$MySqlPluginExecutor.testDatasource(MySqlPlugin.java:659)
        at com.appsmith.server.services.DatasourceServiceImpl.lambda$testDatasourceViaPlugin$13(DatasourceServiceImpl.java:339)
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:118)
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
        at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:241)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144)
        at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
        at reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:121)
        at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:1871)
        at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onComplete(MonoFlatMapMany.java:252)
        at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136)
        at com.mongodb.reactivestreams.client.internal.ObservableToPublisher$1.onComplete(ObservableToPublisher.java:76)
        at com.mongodb.async.client.AbstractSubscription.onComplete(AbstractSubscription.java:154)
        at com.mongodb.async.client.AbstractSubscription.processResultsQueue(AbstractSubscription.java:225)
        at com.mongodb.async.client.AbstractSubscription.tryProcessResultsQueue(AbstractSubscription.java:172)
        at com.mongodb.async.client.MongoIterableSubscription$2.onResult(MongoIterableSubscription.java:105)
        at com.mongodb.async.client.MongoIterableSubscription$2.onResult(MongoIterableSubscription.java:89)
        at com.mongodb.operation.AsyncQueryBatchCursor.next(AsyncQueryBatchCursor.java:174)
        at com.mongodb.operation.AsyncQueryBatchCursor.next(AsyncQueryBatchCursor.java:118)
        at com.mongodb.async.client.MongoIterableSubscription.requestMoreData(MongoIterableSubscription.java:89)
        at com.mongodb.async.client.AbstractSubscription.processResultsQueue(AbstractSubscription.java:227)
        at com.mongodb.async.client.AbstractSubscription.tryProcessResultsQueue(AbstractSubscription.java:172)
        at com.mongodb.async.client.MongoIterableSubscription$2.onResult(MongoIterableSubscription.java:105)
        at com.mongodb.async.client.MongoIterableSubscription$2.onResult(MongoIterableSubscription.java:89)
        at com.mongodb.operation.AsyncQueryBatchCursor.next(AsyncQueryBatchCursor.java:169)
        at com.mongodb.operation.AsyncQueryBatchCursor.next(AsyncQueryBatchCursor.java:118)
        at com.mongodb.async.client.MongoIterableSubscription.requestMoreData(MongoIterableSubscription.java:89)
        at com.mongodb.async.client.MongoIterableSubscription$1.onResult(MongoIterableSubscription.java:53)
        at com.mongodb.async.client.MongoIterableSubscription$1.onResult(MongoIterableSubscription.java:46)
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49)
        at com.mongodb.async.client.OperationExecutorImpl$1$1$1.onResult(OperationExecutorImpl.java:94)
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49)
        at com.mongodb.operation.FindOperation$3.onResult(FindOperation.java:827)
        at com.mongodb.operation.OperationHelper$ReferenceCountedReleasingWrappedCallback.onResult(OperationHelper.java:412)
        at com.mongodb.operation.CommandOperationHelper$10.onResult(CommandOperationHelper.java:481)
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49)
        at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor$2.onResult(DefaultServer.java:245)
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49)
        at com.mongodb.internal.connection.CommandProtocolImpl$1.onResult(CommandProtocolImpl.java:85)
        at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection$1.onResult(DefaultConnectionPool.java:467)
        at com.mongodb.internal.connection.UsageTrackingInternalConnection$2.onResult(UsageTrackingInternalConnection.java:111)
        at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49)
        at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:399)
        at com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:376)
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:677)
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:644)
        at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:514)
        at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:511)
        at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:233)
        at com.mongodb.internal.connection.InternalStreamConnection.readAsync(InternalStreamConnection.java:511)
        at com.mongodb.internal.connection.InternalStreamConnection.access$1000(InternalStreamConnection.java:76)
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:634)
        at com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:619)
        at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:514)
        at com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:511)
        at com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:233)
        at com.mongodb.connection.netty.NettyStream.handleReadResponse(NettyStream.java:263)
        at com.mongodb.connection.netty.NettyStream.access$800(NettyStream.java:69)
        at com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:322)
        at com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:319)
        at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:377)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:377)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:834)
sumitsum commented 2 years ago

Hi @mp911de , has this issue been fixed ?

mp911de commented 2 years ago

That was never a problem of the R2DBC pool in the first place but is rather a class path issue in the application.

sumitsum commented 2 years ago

Hi @mp911de Before trying to add r2dbc-pool my application was configured to use the r2dbc driver for MySql, which it was able to always find ie. I don't get a driver not found error if I don't use the r2dbc-pool i.e. the r2dbc MySQL driver is detectable. I assumed that the r2dbc-pool should also be able to detect the driver automatically without any extra config ? Is this assumption not right ?

mp911de commented 2 years ago

If you can provide a minimal reproducer, then happy to have a look at it.