commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Phil Steitz (JIRA)" <j...@apache.org>
Subject [jira] Issue Comment Edited: (DBCP-244) Connection socket hangs sporadically in DBCP 1.2.2 but not 1.2.1
Date Sat, 02 Feb 2008 06:09:08 GMT

    [ https://issues.apache.org/jira/browse/DBCP-244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12565034#action_12565034
] 

psteitz edited comment on DBCP-244 at 2/1/08 10:08 PM:
-----------------------------------------------------------

One possibility is that this change in behavior is caused by the change to address DBCP-102.
In 1.2.1, PoolableConnectionFactory's activate method *always* did
(*) conn.setAutoCommit(_defaultAutoCommit);
Could be stale / timed out MySQL connections throw (quickly) on this. Pool's borrowObject
would swallow this and try to get another connection, moving along. The change to address
DBCP-102 was to test the property in (*) before resetting it, because for some drivers this
caused a network hit. So in 1.2.2, activate succeeds, the client gets back the stale connection
and things don't go south until the connection is used.

Try adding conn.setAutoCommit(true) immediately after getConnection and before using the connection
after wakeup. If this throws an exception, then the hypothesis above is correct. 
 

      was (Author: psteitz):
    One possibility is that this change in behavior is caused by the change to address DBCP-102.
In 1.2.1, PoolableConnectionFactory's activate method *always* did
(*) conn.setAutoCommit(_defaultAutoCommit);
Could be stale / timed out MySQL connections throw (quickly) on this. Pool's borrowObject
would swallow this and try to get another connection, moving along. The change to address
DBCP-102 was to test the property in (*) before resetting it, because for some drivers this
caused a network hit. So in 1.2.2, activate succeeds, the client gets back the stale connection
and things don't go south until the connection is used.

Try adding conn.setAutoCommit(true) immediately after getConnection and before using the connection
after wakeup. If this resolves the issue, then the hypothesis above is correct.
  
> Connection socket hangs sporadically in DBCP 1.2.2 but not 1.2.1
> ----------------------------------------------------------------
>
>                 Key: DBCP-244
>                 URL: https://issues.apache.org/jira/browse/DBCP-244
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 1.2.2
>         Environment: Fedora Core 3, MySQL 4.1.22. with the latest driver (5.07). Exceptions
only occur in the "job processing" JVM, which sits idle for long periods of time and occasionally
wakes up to interact with the database.
>            Reporter: ori
>             Fix For: 1.3
>
>
> I think I've traced an exception to DBCP's code.
> Communication with the database is hanging sporadically in a production environment.
If I don't set the socketTimeout property on the underlying connection, it will hang forever.
With the socketTimeout property, I get the following exception:
> -------
> com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying
exception:
> ** BEGIN NESTED EXCEPTION **
> java.net.SocketTimeoutException
> MESSAGE: Read timed out
> STACKTRACE:
> java.net.SocketTimeoutException: Read timed out
>        at java.net.SocketInputStream.socketRead0(Native Method)
>        at java.net.SocketInputStream.read(SocketInputStream.java:129)
>        at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
>        at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
>        at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
>        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1994)
>        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2411)
>        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2916)
>        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
>        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
>        at com.mysql.jdbc.Connection.execSQL(Connection.java:3250)
>        at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1355)
>        at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1270)
>        at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
> ...
> -------
> It always happens in an infrequently used JVM (not an app server handling frequent connections).
So it's likely the offending connection was asleep for a long time before the exception occurs.

> I've confirmed that this issue only occurs using 1.2.2 and not 1.2.1. I've been looking
through the changelogs but can't find anything that would cause this behavior.
> Does somebody familiar with the codebase have any idea what change (1.2.1->1.2.2)
could be causing this behavior? 
> Thanks

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message