Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MariadbResult.getRowsUpdated() fails with ClassCastException #22

Closed
mp911de opened this issue Aug 23, 2021 · 2 comments
Closed

MariadbResult.getRowsUpdated() fails with ClassCastException #22

mp911de opened this issue Aug 23, 2021 · 2 comments

Comments

@mp911de
Copy link

mp911de commented Aug 23, 2021

Calling MariadbResult.getRowsUpdated() fails with:

ClassCastException: Cannot cast org.mariadb.r2dbc.MariadbRowSegment to org.mariadb.r2dbc.message.server.OkPacket

Driver version: 1.1.0-beta
Statement: INSERT INTO legoset (id, name, manual) VALUES (?, ?, ?)

Full stack trace:

java.lang.ClassCastException: Cannot cast org.mariadb.r2dbc.MariadbRowSegment to org.mariadb.r2dbc.message.server.OkPacket
		at java.lang.Class.cast(Class.java:3369)
		Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Assembly trace from producer [reactor.core.publisher.FluxMapFuseable] :
	reactor.core.publisher.Flux.cast(Flux.java:3311)
	org.mariadb.r2dbc.MariadbResult.getRowsUpdated(MariadbResult.java:70)
Error has been observed at the following site(s):
	|_          Flux.cast ⇢ at org.mariadb.r2dbc.MariadbResult.getRowsUpdated(MariadbResult.java:70)
	|_           Flux.map ⇢ at org.mariadb.r2dbc.MariadbResult.getRowsUpdated(MariadbResult.java:70)
	|_       Flux.flatMap ⇢ at org.springframework.data.r2dbc.core.DefaultDatabaseClient.sumRowsUpdated(DefaultDatabaseClient.java:1517)
	|_       Flux.collect ⇢ at org.springframework.data.r2dbc.core.DefaultDatabaseClient.sumRowsUpdated(DefaultDatabaseClient.java:1518)
	|_     Mono.usingWhen ⇢ at org.springframework.data.r2dbc.core.DefaultDatabaseClient.inConnection(DefaultDatabaseClient.java:175)
	|_ Operators.complete ⇢ at reactor.netty.FutureMono.doSubscribe(FutureMono.java:122)
	|_    Mono.onErrorMap ⇢ at org.springframework.data.r2dbc.core.DefaultDatabaseClient.inConnection(DefaultDatabaseClient.java:182)
	|_   Mono.flatMapMany ⇢ at org.springframework.data.r2dbc.core.DefaultDatabaseClient$DefaultTypedInsertSpec$1.rowsUpdated(DefaultDatabaseClient.java:1168)
	|_       Flux.collect ⇢ at org.springframework.data.r2dbc.core.DefaultDatabaseClient$DefaultTypedInsertSpec$1.rowsUpdated(DefaultDatabaseClient.java:1169)
Stack trace:
			at java.lang.Class.cast(Class.java:3369)
			at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113)
			at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:184)
			at reactor.core.publisher.FluxTakeUntil$TakeUntilPredicateSubscriber.onNext(FluxTakeUntil.java:84)
			at reactor.core.publisher.FluxWindowPredicate$WindowFlux.drainRegular(FluxWindowPredicate.java:668)
			at reactor.core.publisher.FluxWindowPredicate$WindowFlux.drain(FluxWindowPredicate.java:746)
			at reactor.core.publisher.FluxWindowPredicate$WindowFlux.onNext(FluxWindowPredicate.java:788)
			at reactor.core.publisher.FluxWindowPredicate$WindowPredicateMain.onNext(FluxWindowPredicate.java:239)
			at reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:793)
			at reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:718)
			at reactor.core.publisher.FluxCreate$SerializedFluxSink.next(FluxCreate.java:154)
			at org.mariadb.r2dbc.client.MariadbPacketDecoder.handleBuffer(MariadbPacketDecoder.java:95)
			at org.mariadb.r2dbc.client.MariadbPacketDecoder.decode(MariadbPacketDecoder.java:80)
			at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:508)
			at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:447)
			at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
			at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
			at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
			at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
			at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
			at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
			at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
			at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
			at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
			at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
			at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
			at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
			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.lang.Thread.run(Thread.java:748)
@rusher
Copy link
Collaborator

rusher commented Sep 8, 2021

Thanks for reporting issue.

Since 1.1, client doesn't send capability CLIENT_DEPRECATE_EOF. This permit identification of OUTPUT parameter resultset for stored procedure, but current implementation of Resultset.getRowsUpdated() was expecting an ending OK_Packet. Since CLIENT_DEPRECATE_EOF capability removal, this is not always the case.

Correction has to handle other case (resultset ending with an EOF_Packet).

@rusher
Copy link
Collaborator

rusher commented Apr 8, 2022

corrected with https://jira.mariadb.org/browse/R2DBC-39

@rusher rusher closed this as completed Apr 8, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants