I deploy marauroa-1.34 and stendhal-0.57 in my own machine,server and client can run normal,and I can play game too,but sometimes I exit stendhal,the server will show some error info like this:
********************************************************************************
220562 ERROR marauroa.server.game.JDBCTransaction - rollback failed
java.sql.SQLException: 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: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
STACKTRACE:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2563)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
at com.mysql.jdbc.Connection.checkClosed(Connection.java:1842)
at com.mysql.jdbc.Connection.rollback(Connection.java:4724)
at marauroa.server.game.JDBCTransaction.rollback(JDBCTransaction.java:78)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:795)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
220593 WARN marauroa.server.game.PlayerEntryContainer - error setting RPObject
marauroa.server.game.TransactionException: Communications link failure due to underlying exception:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:60)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2563)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
... 3 more
220609 ERROR marauroa.server.game.GameServerManager - Exception while storing character
marauroa.server.game.GenericDatabaseException: marauroa.server.game.TransactionException: Communications link failure due to underlying exception:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:797)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
Caused by: marauroa.server.game.TransactionException: Communications link failure due to underlying exception:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:60)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
... 2 more
Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2563)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
... 3 more
247703 INFO marauroa.server.game.Statistics - Total/Used memory: 56116/44176
But these error will not appear everytime I exit stendhal,maybe it's the database's problem,I have deployed the server and client according to the manul doc.
I have send a mail to arianne_rpg,and I hope get the answer in here,thank you!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I have found the root cause,my mysql config is not proper,I set:
wait_timeout= 120
interactive_timeout = 120
So if player leave in the game over 2 minutes,marauroa will lost the db connection.
Delete above 2 lines and restart mysql,then it's ok.
But I have a little doubt,why marauroa depend the mysql's timeout?The default timeout value is 8 hours,then it means player can't leave in the game over 8 hours?
Continue...
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Marauroa *opens* a mysql connection. If the connection is not used in TIMEOUT value, the connection is closed. As I told you server should automatically reopen the connection when that happens.
I don't think you see the problem with a common value for MySQL timeout, as each five minutes banned ip are loaded from database.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ok, I reverified your problem and effectively Marauroa reopens the connection to mySQL if it is not valid.
Just open marauroa and in your mysql run this:
show processlist;
kill <processid of marauroa>
Now connection to database is killed, you will see that marauroa shows you that exception, but just after that, the server should keep working correctly. Give a try if you want.
Regards,
Miguel
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Miguel!
I have tested it as you said above.Yes,the server can keep working.
But I still have a doubt about this:
#######################################################################
I don't think you see the problem with a common value for MySQL timeout, as each five minutes banned ip are loaded from database.
#######################################################################
I set the mysql:
wait_timeout= 360
When I stayed in game over 6 minutes and exit,the marauroa server still shows exception,and player's new state(such as money,position) can't be saved in DB.
Follow that,I must try login to server twice,then everything will be ok,but the game data of last turn can't see any more:(
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ok, I see.
Seems that server try database, so it is rejected because connection is closed, so it fails and next time a transaction is retrieved a new connection is created, so yes, you are right, some data may be lost. I report a bug about this.
Thanks a lot.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I deploy marauroa-1.34 and stendhal-0.57 in my own machine,server and client can run normal,and I can play game too,but sometimes I exit stendhal,the server will show some error info like this:
********************************************************************************
220562 ERROR marauroa.server.game.JDBCTransaction - rollback failed
java.sql.SQLException: 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:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
STACKTRACE:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
STACKTRACE:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
STACKTRACE:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2563)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
at com.mysql.jdbc.Connection.checkClosed(Connection.java:1842)
at com.mysql.jdbc.Connection.rollback(Connection.java:4724)
at marauroa.server.game.JDBCTransaction.rollback(JDBCTransaction.java:78)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:795)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
220593 WARN marauroa.server.game.PlayerEntryContainer - error setting RPObject
marauroa.server.game.TransactionException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
STACKTRACE:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:60)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
STACKTRACE:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2563)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
... 3 more
220609 ERROR marauroa.server.game.GameServerManager - Exception while storing character
marauroa.server.game.GenericDatabaseException: marauroa.server.game.TransactionException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
STACKTRACE:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:797)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
Caused by: marauroa.server.game.TransactionException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
STACKTRACE:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:60)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
... 2 more
Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
STACKTRACE:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2351)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
at marauroa.server.game.PlayerEntryContainer.setRPObject(PlayerEntryContainer.java:772)
at marauroa.server.game.GameServerManager.processLogoutEvent(GameServerManager.java:325)
at marauroa.server.game.GameServerManager.run(GameServerManager.java:164)
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2563)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2862)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2988)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2917)
at com.mysql.jdbc.Statement.execute(Statement.java:529)
at marauroa.server.game.JDBCTransaction.begin(JDBCTransaction.java:58)
... 3 more
247703 INFO marauroa.server.game.Statistics - Total/Used memory: 56116/44176
********************************************************************************
But these error will not appear everytime I exit stendhal,maybe it's the database's problem,I have deployed the server and client according to the manul doc.
I have send a mail to arianne_rpg,and I hope get the answer in here,thank you!
I have found the root cause,my mysql config is not proper,I set:
wait_timeout= 120
interactive_timeout = 120
So if player leave in the game over 2 minutes,marauroa will lost the db connection.
Delete above 2 lines and restart mysql,then it's ok.
But I have a little doubt,why marauroa depend the mysql's timeout?The default timeout value is 8 hours,then it means player can't leave in the game over 8 hours?
Continue...
Marauroa *opens* a mysql connection. If the connection is not used in TIMEOUT value, the connection is closed. As I told you server should automatically reopen the connection when that happens.
I don't think you see the problem with a common value for MySQL timeout, as each five minutes banned ip are loaded from database.
Ok, I reverified your problem and effectively Marauroa reopens the connection to mySQL if it is not valid.
Just open marauroa and in your mysql run this:
show processlist;
kill <processid of marauroa>
Now connection to database is killed, you will see that marauroa shows you that exception, but just after that, the server should keep working correctly. Give a try if you want.
Regards,
Miguel
Hi Miguel!
I have tested it as you said above.Yes,the server can keep working.
But I still have a doubt about this:
#######################################################################
I don't think you see the problem with a common value for MySQL timeout, as each five minutes banned ip are loaded from database.
#######################################################################
I set the mysql:
wait_timeout= 360
When I stayed in game over 6 minutes and exit,the marauroa server still shows exception,and player's new state(such as money,position) can't be saved in DB.
Follow that,I must try login to server twice,then everything will be ok,but the game data of last turn can't see any more:(
Ok, I see.
Seems that server try database, so it is rejected because connection is closed, so it fails and next time a transaction is retrieved a new connection is created, so yes, you are right, some data may be lost. I report a bug about this.
Thanks a lot.
ok, great.
Anyway, as I told you, I will investigate a work around this...