|
There is one difference between 2.x and 3.x driver about batch : option `useBulkStmts` default now to true.
This means connector use a protocol dedicated for batch that is way faster than 2.7 implementation.
Could you indicate the server server ? There has been some issue with BULK commands a few years before, but all know issues are now resulved since some time if you are not using some old server version.
|
|
With the parameter useBulkStmts=true in the jdbc url, the error does not occur with a Maria Database Server version 10.5.16.
The error cannot be provoked in a simulation of the problem using a test container (testcontainers.org) and a MariaDB Docker Image 10.5.16.
The error cannot be provoked with a unit test against the "faulty" database either. So the cause must be more complex than just the useBulkStmts=true parameter.
This is the unit test log output with useBulkStmts=true:
Hibernate: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)
|
Hibernate: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)
|
Hibernate: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)
|
Hibernate: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)
|
2022-11-01 17:45:59.175 DEBUG 16472 --- [ main] o.m.jdbc.client.impl.StandardClient : execute query: PREPARE insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)
|
2022-11-01 17:45:59.176 DEBUG 16472 --- [ main] o.m.jdbc.client.impl.StandardClient : execute query: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)
|
2022-11-01 17:45:59.202 DEBUG 16472 --- [ main] o.m.jdbc.client.impl.StandardClient : execute query: COMMIT
|
2022-11-01 17:45:59.211 DEBUG 16472 --- [ main] o.m.jdbc.client.impl.StandardClient : execute query: set autocommit=1
|
2022-11-01 17:45:59.219 DEBUG 16472 --- [ main] o.mariadb.jdbc.message.server.OkPacket : System variable change: autocommit = ON
|
|
|
I've not been able to reproduce bug like this, and without further idea, i'm beeing stuck.
If you face this problem again, could you send server logs corresponding to the problem ?
|
|
Here are the logs for useBulkStmt=false and useBulkStmt=true in case of an error. Repeating the other error case is not easily possible due to the complexity of the ops dependencies.
Server version is 10.5.16, stand alone installation on SUSE Linux Enterprise Server 12 SP5 (x86_64) - kernel version 5.3.18-150300.59.87-default
useBulkStmt=false
query: select glaeubiger0_.id as id1_0_0_, glaeubiger0_.bereich as bereich2_0_0_, glaeubiger0_.role as role3_0_0_ from glaeubiger_bereich glaeubiger0_ where glaeubiger0_.id=?"
query: delete from glaeubiger_gemeinde_bereich_relation where gemeinde_id=?",
query: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)",
query: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)",
query: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)",
query: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)",
query: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)",
query: COMMIT
query: set autocommit=1
System variable change: autocommit = ON
query: set autocommit=0
System variable change: autocommit = OFF
query: set autocommit=1
System variable change: autocommit = ON
—
useBulkStmt=true
query: select glaeubiger0_.id as id1_0_0_, glaeubiger0_.bereich as bereich2_0_0_, glaeubiger0_.role as role3_0_0_ from glaeubiger_bereich glaeubiger0_ where glaeubiger0_.id=?
query: delete from glaeubiger_gemeinde_bereich_relation where gemeinde_id=?",
query: PREPARE insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)",
query: PREPARE insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)",
query: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)",
"message":"HikariPool-2 - Connection org.mariadb.jdbc.Connection@48855791 marked as broken because of SQLSTATE(08000), ErrorCode(-1)","context":"default","exception":"java.sql.BatchUpdateException: (conn=2081285) Socket error
at org.mariadb.jdbc.export.ExceptionFactory.createBatchUpdate(ExceptionFactory.java:181)
at org.mariadb.jdbc.ClientPreparedStatement.executeBatchBulk(ClientPreparedStatement.java:179)
at org.mariadb.jdbc.ClientPreparedStatement.executeInternalPreparedBatch(ClientPreparedStatement.java:115)
at org.mariadb.jdbc.ClientPreparedStatement.executeBatch(ClientPreparedStatement.java:466)
at com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:127)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeBatch(HikariProxyPreparedStatement.java)
at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.performExecution(BatchingBatch.java:125)
at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.doExecuteBatch(BatchingBatch.java:110)
at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.execute(AbstractBatchImpl.java:153)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.executeBatch(JdbcCoordinatorImpl.java:198)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:633)
at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478)
at java.base/java.util.LinkedHashMap.forEach(Unknown Source)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:344)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1407)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1394)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311)
at jdk.proxy2/jdk.proxy2.$Proxy139.flush(Unknown Source)
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.flush(SimpleJpaRepository.java:727)
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.saveAndFlush(SimpleJpaRepository.java:682)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)
at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:530)
at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:286)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:640)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:164)
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:139)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:81)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at jdk.proxy2/jdk.proxy2.$Proxy148.saveAndFlush(Unknown Source)
at de.akdb.bsp.tool.bayern.view.glaeubiger.ConfigGlaeubigerMandantView.savePropagatingExceptions(ConfigGlaeubigerMandantView.java:275)
at de.akdb.bsp.tool.bayern.view.ConfigView.save(ConfigView.java:35)
at de.akdb.bsp.tool.bayern.view.ConfigView$$FastClassBySpringCGLIB$$28e3fa97.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
at de.akdb.bsp.tool.bayern.view.glaeubiger.ConfigGlaeubigerMandantView$$EnhancerBySpringCGLIB$$6e9ac068.save(<generated>)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:126)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:72)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:495)
at javax.faces.component.UICommand.broadcast(UICommand.java:211)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:847)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1396)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:58)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:76)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:177)
at javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:707)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:451)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:186)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:769)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.sql.BatchUpdateException: (conn=2081285) Socket error
at org.mariadb.jdbc.export.ExceptionFactory.createBatchUpdate(ExceptionFactory.java:215)
at org.mariadb.jdbc.client.impl.StandardClient.executePipeline(StandardClient.java:624)
at org.mariadb.jdbc.ClientPreparedStatement.executeBatchBulk(ClientPreparedStatement.java:148)
... 126 common frames omitted
Caused by: java.sql.SQLNonTransientConnectionException: (conn=2081285) Socket error
at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:293)
at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:359)
at org.mariadb.jdbc.client.impl.StandardClient.readPacket(StandardClient.java:863)
at org.mariadb.jdbc.client.impl.StandardClient.readResults(StandardClient.java:779)
at org.mariadb.jdbc.client.impl.StandardClient.readResponse(StandardClient.java:698)
at org.mariadb.jdbc.client.impl.StandardClient.executePipeline(StandardClient.java:575)
... 127 common frames omitted
Caused by: java.net.SocketException: Connection reset
at java.base/sun.nio.ch.NioSocketImpl.implRead(Unknown Source)
at java.base/sun.nio.ch.NioSocketImpl.read(Unknown Source)
at java.base/sun.nio.ch.NioSocketImpl$1.read(Unknown Source)
at java.base/java.net.Socket$SocketInputStream.read(Unknown Source)
at java.base/java.io.BufferedInputStream.fill(Unknown Source)
at java.base/java.io.BufferedInputStream.read1(Unknown Source)
at java.base/java.io.BufferedInputStream.read(Unknown Source)
at org.mariadb.jdbc.client.socket.impl.PacketReader.readPacket(PacketReader.java:76)
at org.mariadb.jdbc.message.client.PreparePacket.readPacket(PreparePacket.java:63)
at org.mariadb.jdbc.client.impl.StandardClient.readPacket(StandardClient.java:840)
... 130 common frames omitted
|