Skip to content

MysqlBatchException without any information and stopping thread without cause #1639

Closed
@hofmann-dev

Description

@hofmann-dev

Hi,

I have a problem that is very confusing for me. Via a Kafka request I receive large amounts of data, always with 3000 units per message, which are to be written into the database one after the other. In principle, everything works, but after different times and without any information as to why, I receive the following error message:

javax.persistence.PersistenceException: org.hibernate.HibernateException: io.vertx.mysqlclient.MySQLBatchException: Error occurs during batch execution at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) at org.hibernate.reactive.session.impl.ReactiveExceptionConverter.convert(ReactiveExceptionConverter.java:31) at org.hibernate.reactive.session.impl.ReactiveSessionImpl.lambda$doFlush$33(ReactiveSessionImpl.java:918) at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930) at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088) at org.hibernate.reactive.util.async.impl.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:123) at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859) at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088) at org.hibernate.reactive.util.async.impl.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:123) at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859) at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088) at io.vertx.core.Future.lambda$toCompletionStage$2(Future.java:362) at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:153) at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:75) at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:230) at io.vertx.core.impl.future.PromiseImpl.tryFail(PromiseImpl.java:23) at io.vertx.sqlclient.impl.QueryResultBuilder.tryFail(QueryResultBuilder.java:118) at io.vertx.core.Promise.fail(Promise.java:89) at io.vertx.core.Promise.handle(Promise.java:53) at io.vertx.core.Promise.handle(Promise.java:29) at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:153) at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:75) at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:230) at io.vertx.core.impl.future.PromiseImpl.tryFail(PromiseImpl.java:23) at io.vertx.core.impl.future.PromiseImpl.onFailure(PromiseImpl.java:54) at io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:43) at io.vertx.sqlclient.impl.TransactionImpl.lambda$wrap$0(TransactionImpl.java:72) at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:153) at io.vertx.core.impl.future.FutureBase.lambda$emitFailure$1(FutureBase.java:69) at io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:86) at io.vertx.core.impl.DuplicatedContext.execute(DuplicatedContext.java:163) at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:66) at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:230) at io.vertx.core.impl.future.PromiseImpl.tryFail(PromiseImpl.java:23) at io.vertx.core.impl.future.PromiseImpl.onFailure(PromiseImpl.java:54) at io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:43) at io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:23) at io.vertx.sqlclient.impl.command.CommandResponse.fire(CommandResponse.java:46) at io.vertx.sqlclient.impl.SocketConnectionBase.handleMessage(SocketConnectionBase.java:287) at io.vertx.sqlclient.impl.SocketConnectionBase.lambda$init$0(SocketConnectionBase.java:100) at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:55) at io.vertx.core.impl.ContextBase.emit(ContextBase.java:239) at io.vertx.core.net.impl.NetSocketImpl.handleMessage(NetSocketImpl.java:394) at io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:155) at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:153) 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.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) at io.vertx.mysqlclient.impl.codec.MySQLEncoder.handleCommandResponse(MySQLEncoder.java:63) at io.vertx.mysqlclient.impl.codec.QueryCommandBaseCodec.handleAllResultsetDecodingCompleted(QueryCommandBaseCodec.java:173) at io.vertx.mysqlclient.impl.codec.ExtendedQueryCommandBaseCodec.handleAllResultsetDecodingCompleted(ExtendedQueryCommandBaseCodec.java:51) at io.vertx.mysqlclient.impl.codec.ExtendedBatchQueryCommandCodec.handleAllResultsetDecodingCompleted(ExtendedBatchQueryCommandCodec.java:76) at io.vertx.mysqlclient.impl.codec.QueryCommandBaseCodec.handleSingleResultsetDecodingCompleted(QueryCommandBaseCodec.java:136) at io.vertx.mysqlclient.impl.codec.ExtendedBatchQueryCommandCodec.handleSingleResultsetDecodingCompleted(ExtendedBatchQueryCommandCodec.java:65) at io.vertx.mysqlclient.impl.codec.ExtendedQueryCommandBaseCodec.handleInitPacket(ExtendedQueryCommandBaseCodec.java:39) at io.vertx.mysqlclient.impl.codec.QueryCommandBaseCodec.decodePayload(QueryCommandBaseCodec.java:56) at io.vertx.mysqlclient.impl.codec.MySQLDecoder.decodePacket(MySQLDecoder.java:78) at io.vertx.mysqlclient.impl.codec.MySQLDecoder.decode(MySQLDecoder.java:66) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:510) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:449) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:279) at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) 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:722) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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:829) Caused by: org.hibernate.HibernateException: io.vertx.mysqlclient.MySQLBatchException: Error occurs during batch execution ... 84 more Caused by: io.vertx.mysqlclient.MySQLBatchException: Error occurs during batch execution at io.vertx.mysqlclient.impl.codec.ExtendedBatchQueryCommandCodec.reportError(ExtendedBatchQueryCommandCodec.java:95) at io.vertx.mysqlclient.impl.codec.ExtendedBatchQueryCommandCodec.handleErrorPacketPayload(ExtendedBatchQueryCommandCodec.java:56) at io.vertx.mysqlclient.impl.codec.ExtendedQueryCommandBaseCodec.handleInitPacket(ExtendedQueryCommandBaseCodec.java:42) ... 23 more

As soon as this error message starts coming, it happens after 3-6 of these messages that the complete Kafka subscriber stops without even one piece of information.
Looks like this:

2023-05-27 16:25:44,378 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) START: replaceOrInsert 2023-05-27 16:25:44,378 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Open session... 2023-05-27 16:25:44,439 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Get corporate list... 2023-05-27 16:25:44,822 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Update corporate list... 3000 2023-05-27 16:25:44,829 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Persist corporate list... 2023-05-27 16:25:44,868 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Flush corporate list... 2023-05-27 16:25:44,895 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Successfully persisted corporates 2023-05-27 16:25:44,916 INFO [com.qua.q1.pac.blo.BlobFileService] (vert.x-eventloop-thread-0) Blob content: 3000 2023-05-27 16:25:44,917 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) START: replaceOrInsert 2023-05-27 16:25:44,917 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Open session... 2023-05-27 16:25:44,977 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Get corporate list... 2023-05-27 16:25:45,364 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Update corporate list... 3000 2023-05-27 16:25:45,371 INFO [com.qua.q1.con.FirmController] (vert.x-eventloop-thread-0) Persist corporate list...

To me it looks like some part of the connection to mysql stays open and then causes this error after many passes.

By the way, I have to use "openSession" because when I use "withSession" I always get the error message that the thread is not a vertx thread (although it is).

Hope some one can help me.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions