ReunionDev / reunion

http://reunionemu.org
Other
16 stars 15 forks source link

Player save() Exceptions and duplicate stuff on db (happened for normal player) #4

Closed Cas7iel closed 11 years ago

Cas7iel commented 11 years ago

INFO network - Player Playername saving...

Result of this Exception is, that the complete inventory will vanish: WARN network - Exception com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '96295' for key 'PRIMARY' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:532) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2618) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:842) at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:681) at org.reunionemu.jreunion.server.DatabaseUtils.saveInventory(DatabaseUtils.java:851) at org.reunionemu.jreunion.game.Player.save(Player.java:786) at org.reunionemu.jreunion.server.LocalMap.handleEvent(LocalMap.java:612) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:131) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:40) at org.reunionemu.jreunion.game.Player.handleEvent(Player.java:1472) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:131) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:40) at org.reunionemu.jreunion.server.Client.handleEvent(Client.java:266) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:131) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:40) at org.reunionemu.jreunion.server.Network.disconnect(Network.java:212) at org.reunionemu.jreunion.server.Network.run(Network.java:112) at java.lang.Thread.run(Thread.java:679) INFO network - Player Playername saving complete!

Result after this Exception is a emtpy or totally bugged Stash: WARN network - Playername: Stash saving failed ... java.lang.NullPointerException at org.reunionemu.jreunion.server.DatabaseUtils.saveStash(DatabaseUtils.java:1281) at org.reunionemu.jreunion.game.Player.save(Player.java:811) at org.reunionemu.jreunion.server.PacketParser.HandleMessage(PacketParser.java:818) at org.reunionemu.jreunion.server.PacketParser.Parse(PacketParser.java:1132) at org.reunionemu.jreunion.server.PacketParser.handleEvent(PacketParser.java:1161) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:131) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:40) at org.reunionemu.jreunion.server.Client.handleEvent(Client.java:260) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:131) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:40) at org.reunionemu.jreunion.server.Network.processInput(Network.java:172) at org.reunionemu.jreunion.server.Network.run(Network.java:105) at java.lang.Thread.run(Thread.java:679) INFO network - Player Playername saving complete!

Result after this Exception is a empty or totally bugged Inventory: WARN network - Playername: Inventory saving failed ... java.lang.NullPointerException at org.reunionemu.jreunion.server.DatabaseUtils.saveInventory(DatabaseUtils.java:847) at org.reunionemu.jreunion.game.Player.save(Player.java:786) at org.reunionemu.jreunion.server.PacketParser.HandleMessage(PacketParser.java:818) at org.reunionemu.jreunion.server.PacketParser.Parse(PacketParser.java:1132) at org.reunionemu.jreunion.server.PacketParser.handleEvent(PacketParser.java:1161) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:131) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:40) at org.reunionemu.jreunion.server.Client.handleEvent(Client.java:260) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:131) at org.reunionemu.jreunion.events.EventDispatcher.fireEvent(EventDispatcher.java:40) at org.reunionemu.jreunion.server.Network.processInput(Network.java:172) at org.reunionemu.jreunion.server.Network.run(Network.java:105) at java.lang.Thread.run(Thread.java:679) INFO network - Player Playernamesaving complete!

tjvdmolen commented 11 years ago

This issue should automatically be resolved as soon as we hibernatize all entities.

bigsam commented 11 years ago

This happens, for example, when player A have item A in his inventory and stored in the DB, then if player A drops item A and player B pick up item A, and player B is saved before player A, then the item will still exist in The DB on table inventory associated to player A.

tjvdmolen commented 11 years ago

This issue should now be fixed on the items branch