Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Incomplete
-
3.0.5, 3.0.8
-
None
-
None
-
Server: Standalone 10.5.16 (standalone) on SUSE Linux Enterprise Server 12, or original docker image (10.5.2)
Client: Spring Boot 2.7.4, Java 17, docker image based on Alpine Linux
Description
At the moment I have no further idea how to get closer to the problem. That's why I'm asking here for more ideas.
I have described the problem on Zulip https://mariadb.zulipchat.com/#narrow/stream/118759-general/topic/Connector.2FJ.203.2E0.2E5.20-.20Got.20an.20error.20reading.20communication.20packe/near/304664479
Repeated:
After updating the JDBC driver from 2.7.5 to 3.0.5, I see a problem when updating a simple join table that I unfortunately cannot reproduce locally and on test stages.
The error code on the client side is SQLSTATE(08000), ErrorCode(1220)
Client side:
{{"org.hibernate.engine.jdbc.batch.internal.BatchingBatch","message":"HHH000315: Exception executing batch [java.sql.BatchUpdateException: java.sql.BatchUpdateException: java.sql.SQLNonTransientConnectionException: (conn=167) Socket error], SQL: insert into glaeubiger_gemeinde_bereich_relation (gemeinde_id, bereich_id) values (?, ?)","context":"default"
}}
root cause:
Caused by: java.sql.SQLNonTransientConnectionException: (conn=167) Socket error
at org.mariadb.jdbc.export.ExceptionFactory.createException(ExceptionFactory.java:291)
at org.mariadb.jdbc.export.ExceptionFactory.create(ExceptionFactory.java:357)
at org.mariadb.jdbc.client.impl.StandardClient.readPacket(StandardClient.java:842)
at org.mariadb.jdbc.client.impl.StandardClient.readResults(StandardClient.java:758)
at org.mariadb.jdbc.client.impl.StandardClient.readResponse(StandardClient.java:677)
at org.mariadb.jdbc.client.impl.StandardClient.executePipeline(StandardClient.java:554)
... 127 common frames omitted
Caused by: java.net.SocketException: Connection reset
at java.base/java.net.SocketInputStream.read(Unknown Source)
at java.base/java.net.SocketInputStream.read(Unknown Source)
at java.base/java.io.FilterInputStream.read(Unknown Source)
at org.mariadb.jdbc.client.socket.impl.ReadAheadBufferedStream.fillingBuffer(ReadAheadBufferedStream.java:93)
at org.mariadb.jdbc.client.socket.impl.ReadAheadBufferedStream.read(ReadAheadBufferedStream.java:66)
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:819)
... 130 common frames omitted
server side:
[Warning] Aborted connection 167 to db: 'fis' user: 'fis' host: '172.31.148.80' (Got an error reading communication packets)
And today again a problem with the Maria JDBC Driver 3.0.8. Another app, another environment. So far I haven't been able to reproduce this error with a different environment either. The driver was released this year, but I'm surprised that there haven't been any problems with it so far.
Attachments
Activity
@Diego Depin server versions: standalone 10.5.16 and docker image is 10.5.2
I don't think it's the server. If I start the app image in my local environment and connect to the original server, the usecase works.
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
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.