Hello,
Trying to nail down the cause of this link issue, so far have not seen
any
network issues between app server and DB, but all of a sudden started
seeing
these. Is there any retry setting I could use ?
ActiveRecord::ActiveRecordError: No operations allowed after connection
closed.Connection was implicitly closed due to underlying
exception/error:
** BEGIN NESTED EXCEPTION **
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
MESSAGE: Communications link failure
Last packet sent to the server was 0 ms ago.
STACKTRACE:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications
link
failure
Last packet sent to the server was 0 ms ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2871)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3414)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
at
com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4874)
at
jdbc_adapter.JdbcAdapterInternalService.begin(JdbcAdapterInternalService.java:394)
at
jdbc_adapter.JdbcAdapterInternalService$s_method_0_0$RUBYINVOKER$begin.call(jdbc_adapter/JdbcAdapterInternalService$s_method_0_0$RUBYINVOKER$begin.gen)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:340)
at
ruby.jit.ruby.usr.local.apache_minus_tomcat_minus_5_dot_5_dot_26.webapps.insider_1_1.WEB_minus_INF.gems.gems.activerecord_minus_jdbc_minus_adapter_minus_0_dot_8_dot_2.lib.jdbc_adapter.jdbc_mysql.begin_db_transaction1516060359_840759659.rescue_1$RUBY$rescue(jdbc_mysql.rb:102)
at
ruby.jit.ruby.usr.local.apache_minus_tomcat_minus_5_dot_5_dot_26.webapps.insider_1_1.WEB_minus_INF.gems.gems.activerecord_minus_jdbc_minus_adapter_minus_0_dot_8_dot_2.lib.jdbc_adapter.jdbc_mysql.begin_db_transaction1516060359_840759659.file(jdbc_mysql.rb)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:202)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:340)
I tried updating the wait_timeout variable to something really low but
still
seeing the issue only after periods of long inactivity.
Has anyone else hit this with MySQL 5 after a long period of inactivity
?
Is this a JDBC driver issue or strictly ActiveRecord?
Hi AD,
Cause and work around is well documented here:
AD wrote:
Rails 2.1.1
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
at
at
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:202)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:340)
Were you ever able to get a resolution for this issue? We are
experiencing
a very similar issue (see below). I don’t think ours is related to the
mysql wait_timeout but instead think it’s related to a Firewall TCP
Connection Timeout. This pretty much hoses all the connections in the
pool
and they don’t recover, just keep rethrowing the same exception until
glassfish is restarted. I’m not sure why the connection is not
automatically reconnected and the query retried in this case.
Maybe a little monkey patching is needed for the ConnectionAdapters
execute
method?
[2906] [2906],b.size=>0,User Load (0.0ms)
ActiveRecord::ActiveRecordError:
No operations allowed after connection closed.Connection was implicitly
closed due to underlying exception/error:
** BEGIN NESTED EXCEPTION **
com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception:
java.net.SocketException: Connection reset
at
java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
at
java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at
java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at
java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2637)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1554)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3099)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1169)
at
jdbc_adapter.RubyJdbcConnection$6.call(RubyJdbcConnection.java:259)