[CONJ-34] AssertionError is thrown from PacketOutputStream when server goes away Created: 2013-05-06  Updated: 2015-04-20  Resolved: 2013-05-06

Status: Closed
Project: MariaDB Connector/J
Component/s: None
Affects Version/s: None
Fix Version/s: 1.1.3

Type: Bug Priority: Major
Reporter: Chad Retz (Inactive) Assignee: Vladislav Vaintroub
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates
relates to CONJ-68 java.io.IOException: Last packet not ... Closed

 Description   

When I call Connection::close(), I get an AssertionError from PacketOutputStream. Disabling assertions doesn't work because these exceptions are for some reason thrown explicitly and on purpose. Please change these to common catchable/swallowable exceptions. I am now having to catch this specifically (or worse Throwable which gets things like OutOfMemoryError) when trying to swallow exceptions on close().

Here is a stack trace with c3p0:

java.lang.AssertionError: Last packet not finished
        at org.mariadb.jdbc.internal.common.packet.PacketOutputStream.startPacket(PacketOutputStream.java:38)
        at org.mariadb.jdbc.internal.common.packet.commands.ClosePacket.send(ClosePacket.java:66)
        at org.mariadb.jdbc.internal.mysql.MySQLProtocol.close(MySQLProtocol.java:563)
        at org.mariadb.jdbc.internal.mysql.MySQLProtocol.close(MySQLProtocol.java:600)
        at org.mariadb.jdbc.MySQLConnection.close(MySQLConnection.java:249)
        at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:549)
        at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:234)
        at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
        at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964)
        at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

It can happen elsewhere:

java.lang.AssertionError: Last packet not finished
        at org.mariadb.jdbc.internal.common.packet.PacketOutputStream.startPacket(PacketOutputStream.java:38)
        at org.mariadb.jdbc.internal.common.packet.commands.StreamedQueryPacket.send(StreamedQueryPacket.java:76)
        at org.mariadb.jdbc.internal.mysql.MySQLProtocol.executeQuery(MySQLProtocol.java:789)
        at org.mariadb.jdbc.MySQLStatement.execute(MySQLStatement.java:282)
        at org.mariadb.jdbc.MySQLStatement.executeQuery(MySQLStatement.java:302)
        at org.mariadb.jdbc.MySQLStatement.executeQuery(MySQLStatement.java:361)
        at org.mariadb.jdbc.MySQLConnection.getAutoCommit(MySQLConnection.java:199)
        at com.mchange.v2.c3p0.impl.C3P0ImplUtils.resetTxnState(C3P0ImplUtils.java:270)
        at com.mchange.v2.c3p0.impl.NewPooledConnection.reset(NewPooledConnection.java:388)
        at com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnection(NewPooledConnection.java:362)
        at com.mchange.v2.c3p0.impl.NewProxyConnection.close(NewProxyConnection.java:1246)



 Comments   
Comment by Marissa Hollingsworth [ 2013-05-14 ]

Does anyone know what may cause the second case mentioned in the description? The exception seems to occur frequently when the setAutoCommit command is executed.

Caused by: java.lang.AssertionError: Last packet not finished
at org.mariadb.jdbc.internal.common.packet.PacketOutputStream.startPacket(PacketOutputStream.java:38)
at org.mariadb.jdbc.internal.common.packet.commands.StreamedQueryPacket.send(StreamedQueryPacket.java:76)
at org.mariadb.jdbc.internal.mysql.MySQLProtocol.executeQuery(MySQLProtocol.java:898)
at org.mariadb.jdbc.MySQLStatement.execute(MySQLStatement.java:282)
at org.mariadb.jdbc.MySQLStatement.executeUpdate(MySQLStatement.java:317)
at org.mariadb.jdbc.MySQLStatement.executeUpdate(MySQLStatement.java:349)
at org.mariadb.jdbc.MySQLConnection.setAutoCommit(MySQLConnection.java:188)
at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:331)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:317)
at $Proxy98.setAutoCommit(Unknown Source)

Comment by Vladislav Vaintroub [ 2013-05-14 ]

One of possible causes is that server has shut down or connection was killed, or inactivity timeout was reached, and as reasult socket was closed on the server side.

Generated at Thu Feb 08 03:12:41 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.