Description
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.