[MXS-3432] JDBC getConnection hangs during switchover Created: 2021-03-09  Updated: 2021-08-05  Resolved: 2021-08-05

Status: Closed
Project: MariaDB MaxScale
Component/s: N/A
Affects Version/s: 2.4.16
Fix Version/s: N/A

Type: Bug Priority: Major
Reporter: Allen Lee (Inactive) Assignee: markus makela
Resolution: Cannot Reproduce Votes: 0
Labels: None

Sprint: MXS-SPRINT-127, MXS-SPRINT-128, MXS-SPRINT-129

 Description   

User reported the following error during maxscale switchover.

Thread: TaskThread@5e135ee8 Thread[http-nio-xxx.xxx.xxx.xxx-8080-exec-19,5,main] RUNNABLE
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
java.net.SocketInputStream.read(SocketInputStream.java:171)
java.net.SocketInputStream.read(SocketInputStream.java:141)
java.io.FilterInputStream.read(FilterInputStream.java:133)
org.mariadb.jdbc.internal.io.input.ReadAheadBufferedStream.fillBuffer(ReadAheadBufferedStream.java:131)
org.mariadb.jdbc.internal.io.input.ReadAheadBufferedStream.read(ReadAheadBufferedStream.java:104)
org.mariadb.jdbc.internal.io.input.StandardPacketInputStream.getPacketArray(StandardPacketInputStream.java:247)
org.mariadb.jdbc.internal.io.input.StandardPacketInputStream.getPacket(StandardPacketInputStream.java:218)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1532)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1513)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.readRequestSessionVariables(AbstractConnectProtocol.java:986)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.readPipelineAdditionalData(AbstractConnectProtocol.java:1032)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.postConnectionQueries(AbstractConnectProtocol.java:873)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:588)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connect(AbstractConnectProtocol.java:489)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:2046)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1534)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1513)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.readPipelineAdditionalData(AbstractConnectProtocol.java:1024)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.postConnectionQueries(AbstractConnectProtocol.java:873)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:588)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connect(AbstractConnectProtocol.java:489)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:2046)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1534)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1513)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.readPipelineAdditionalData(AbstractConnectProtocol.java:1024)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.postConnectionQueries(AbstractConnectProtocol.java:873)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:588)
org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connect(AbstractConnectProtocol.java:489)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:2046)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1534)
org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1513)
org.mariadb.jdbc.inter

connector team confirmed and suggested the below and also suggested to file a bug for this to maxscale team as connector team thinks this was fixed in earlier in maxscale, but it shows again.

For the error 'Thread: TaskThread@5e135ee8 Thread[http-nio-xx.xxx.x.xxx-8080-exec-19,5,main] RUNNABLE', engineering noted:
=====================================================================================
There has a been a socket error during a query, then connector has create a new connection, get a new socket, but failed on queries post connection.
There is 2 queries executed after successfull authentication, and according to error, those are pipelined ("set autocommit=1, ..." and a select), meaning the 2 commands are send to server, then connectors read the 2 answers. it would seems server send the result for first query, but never send the result of the select, so connector hangs waiting for select result.
=====================================================================================
It seems that it is obvious why this thread was hung for that long. To overcome this situation, you could set the following option. Please try this option and let us know how it works for you.
=======================================
usePipelineAuth = false
=======================================



 Comments   
Comment by markus makela [ 2021-03-26 ]

Tested with 2.4.16 and repeated creation of connections during switchover, wasn't able to reproduce it.

allen.lee@mariadb.com does the problem still happen if usePipelineAuth = false is used for the connector?

Comment by markus makela [ 2021-08-05 ]

I'll close this as Cannot Reproduce since we haven't had any news on this.

Generated at Thu Feb 08 04:21:22 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.