[ https://issues.apache.org/jira/browse/DERBY-7123?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard N. Hillegas updated DERBY-7123: --------------------------------------- Bug behavior facts: Crash,Seen in production Component/s: (was: JDBC) Network Server Issue & fix info: Repro attached Urgency: Normal > Opening many client connections at the same time can hang > --------------------------------------------------------- > > Key: DERBY-7123 > URL: https://issues.apache.org/jira/browse/DERBY-7123 > Project: Derby > Issue Type: Bug > Components: Network Server > Affects Versions: 10.14.2.0, 10.15.2.0 > Environment: Test run on > $ uname -a > Linux mattiasl-laptop2020 5.8.0-63-generic #71-Ubuntu SMP Tue Jul 13 15:59:12 > UTC 2021 x86_64 x86_64 x86_64 GNU/Linux > Reporter: Mattias Lundstrom > Priority: Major > Attachments: DerbyTest.java > > > If many connections are opened at the same time towards a Derby network > server using ClientConnectionPoolDataSource.getPooledConnection, then this > operation may hang indefinitely. > This has been tested with network server version 10.14.2.0 and 10.15.2.0 and > the same client versions. > Attached test client program (for 10.15.2.0) to show the behavior. It just > repeatedly tries to open 1000 connections in parallel to the same server (in > the production system, there were much fewer connections, but that makes it > is harder to reproduce). It is generally slow and sometimes seems to hang > indefinitely. > Test can be run by just having a local network server and create a database > and then > {code:java} > $ javac -cp derbyclient.jar:derbytools.jar DerbyTest.java > $ java -cp .:derbyclient.jar:derbytools.jar DerbyTest localhost 1527 seconddb > {code} > (where "seconddb" is the test database) > Testing seems to show that if the getPooledConnection operation is > synchronized, the problem disappears (see commented out code in test > program). We are using this workaround in our application for now. > Running the test program, sometimes the connection seems to hang indefinitely > or at the very least be extremely slow. In these situations neither client > nor server consumes any CPU and the client seems to wait for IO from the > server. > Stacktrace from client > {quote}java.base@11.0.11/java.net.SocketInputStream.socketRead0(Native > Method) > > java.base@11.0.11/java.net.SocketInputStream.socketRead(SocketInputStream.java:115) > > > java.base@11.0.11/java.net.SocketInputStream.read(SocketInputStream.java:168) > > java.base@11.0.11/java.net.SocketInputStream.read(SocketInputStream.java:140) > app//org.apache.derby.client.net.Reply.fill(Reply.java:172) > > app//org.apache.derby.client.net.Reply.ensureALayerDataInBuffer(Reply.java:216) > > app//org.apache.derby.client.net.Reply.readDssHeader(Reply.java:319) > > app//org.apache.derby.client.net.Reply.startSameIdChainParse(Reply.java:1085) > > app//org.apache.derby.client.net.NetConnectionReply.readExchangeServerAttributes(NetConnectionReply.java:56) > > > app//org.apache.derby.client.net.NetConnection.readServerAttributesAndKeyExchange(NetConnection.java:764) > > > app//org.apache.derby.client.net.NetConnection.flowServerAttributesAndKeyExchange(NetConnection.java:708) > > > app//org.apache.derby.client.net.NetConnection.flowUSRIDONLconnect(NetConnection.java:562) > > > app//org.apache.derby.client.net.NetConnection.flowConnect(NetConnection.java:359) > > > app//org.apache.derby.client.net.NetConnection.initialize(NetConnection.java:274) > > > app//org.apache.derby.client.net.NetConnection.<init>(NetConnection.java:260) > > app//org.apache.derby.client.net.ClientJDBCObjectFactoryImpl.newNetConnection(ClientJDBCObjectFactoryImpl.java:327) > > > app//org.apache.derby.client.ClientPooledConnection.<init>(ClientPooledConnection.java:130) > > > app//org.apache.derby.client.net.ClientJDBCObjectFactoryImpl.newClientPooledConnection(ClientJDBCObjectFactoryImpl.java:85) > > > app//org.apache.derby.client.BasicClientDataSource.getPooledConnectionX(BasicClientDataSource.java:1619) > > > app//org.apache.derby.client.BasicClientDataSource.getPooledConnectionMinion(BasicClientDataSource.java:1560) > > > app//org.apache.derby.jdbc.ClientConnectionPoolDataSource.getPooledConnection(ClientConnectionPoolDataSource.java:69) > {quote} > -- This message was sent by Atlassian Jira (v8.3.4#803005)