Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't insert some actions to MySQL database, and search, rollback or restore and etc after fail #285

Open
2 of 3 tasks
HyperPaint opened this issue Jul 26, 2024 · 4 comments
Labels
bug Something isn't working

Comments

@HyperPaint
Copy link

HyperPaint commented Jul 26, 2024

Expected behavior

Actions inserted as always

Observed/actual behavior

Log messages like this when mod tries insert actions

[11:52:04] [DefaultDispatcher-worker-2/WARN] (Exposed) Transaction attempt #7 failed: java.sql.BatchUpdateException: Data truncation: Data too long for column 'extra_data' at row 41. Statement(s): INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO actions (action_id, block_state, extra_data, object_id, old_block_state, old_object_id, player_id, rolled_back, source, time, world_id, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
org.jetbrains.exposed.exceptions.ExposedSQLException: java.sql.BatchUpdateException: Data truncation: Data too long for column 'extra_data' at row 41
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:94) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:244) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:221) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.statements.Statement.execute(Statement.kt:55) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.QueriesKt.executeBatch(Queries.kt:302) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.QueriesKt.batchInsert(Queries.kt:201) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.QueriesKt.batchInsert(Queries.kt:176) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.QueriesKt.batchInsert$default(Queries.kt:171) ~[ledger.jar:?]
at com.github.quiltservertools.ledger.database.DatabaseManager.insertActions(DatabaseManager.kt:416) ~[ledger.jar:?]
at com.github.quiltservertools.ledger.database.DatabaseManager.access$insertActions(DatabaseManager.kt:68) ~[ledger.jar:?]
at com.github.quiltservertools.ledger.database.DatabaseManager$logActionBatch$2.invokeSuspend(DatabaseManager.kt:341) ~[ledger.jar:?]
at com.github.quiltservertools.ledger.database.DatabaseManager$logActionBatch$2.invoke(DatabaseManager.kt) ~[ledger.jar:?]
at com.github.quiltservertools.ledger.database.DatabaseManager$logActionBatch$2.invoke(DatabaseManager.kt) ~[ledger.jar:?]
at com.github.quiltservertools.ledger.database.DatabaseManager$execute$2.invokeSuspend(DatabaseManager.kt:382) ~[ledger.jar:?]
at com.github.quiltservertools.ledger.database.DatabaseManager$execute$2.invoke(DatabaseManager.kt) ~[ledger.jar:?]
at com.github.quiltservertools.ledger.database.DatabaseManager$execute$2.invoke(DatabaseManager.kt) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.transactions.experimental.SuspendedKt$suspendedTransactionAsyncInternal$1.invokeSuspend(Suspended.kt:187) ~[ledger.jar:?]
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[org_jetbrains_kotlin_kotlin-stdlib-2.0.0-e823d47a24b16be4.jar:?]
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.8.1-682b081a811ff4e1.jar:?]
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:111) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.8.1-682b081a811ff4e1.jar:?]
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:99) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.8.1-682b081a811ff4e1.jar:?]
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.8.1-682b081a811ff4e1.jar:?]
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:811) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.8.1-682b081a811ff4e1.jar:?]
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:715) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.8.1-682b081a811ff4e1.jar:?]
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:702) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.8.1-682b081a811ff4e1.jar:?]
Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'extra_data' at row 41
at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:223) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchWithMultiValuesClause(ClientPreparedStatement.java:716) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:407) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:802) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:127) ~[com_zaxxer_hikaricp-5.1.0-a2ab78c3c3386cdb.jar:?]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeBatch(HikariProxyPreparedStatement.java) ~[com_zaxxer_hikaricp-5.1.0-a2ab78c3c3386cdb.jar:?]
at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeBatch(JdbcPreparedStatementImpl.kt:91) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.statements.InsertStatement.execInsertFunction(InsertStatement.kt:158) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.statements.InsertStatement.executeInternal(InsertStatement.kt:168) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.statements.InsertStatement.executeInternal(InsertStatement.kt:18) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:92) ~[ledger.jar:?]
... 24 more
Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'extra_data' at row 41
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:555) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:339) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1054) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1003) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1312) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchWithMultiValuesClause(ClientPreparedStatement.java:677) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:407) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:802) ~[com_mysql_mysql-connector-j-8.3.0-ecd0628c956d655f.jar:?]
at com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:127) ~[com_zaxxer_hikaricp-5.1.0-a2ab78c3c3386cdb.jar:?]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeBatch(HikariProxyPreparedStatement.java) ~[com_zaxxer_hikaricp-5.1.0-a2ab78c3c3386cdb.jar:?]
at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeBatch(JdbcPreparedStatementImpl.kt:91) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.statements.InsertStatement.execInsertFunction(InsertStatement.kt:158) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.statements.InsertStatement.executeInternal(InsertStatement.kt:168) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.statements.InsertStatement.executeInternal(InsertStatement.kt:18) ~[ledger.jar:?]
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:92) ~[ledger.jar:?]
... 24 more
[11:52:04] [DefaultDispatcher-worker-2/WARN] (Exposed) Wait 979597 milliseconds before retrying

No logs, but message Text.translatable("error.ledger.command.no_results") when search after error. Maybe connection pool is busy

And queue in ledger status stacking up to 18 thousands and so on...

Steps/models to reproduce

idk, it seems like some action has very big extra data

What operating system are you running

Linux

Minecraft version

1.20.4

Ledger version

1.3.1

Logs

useful logs in Observed/actual behavior

Agreements

  • I am running the latest version of the mod.
  • My version of Minecraft is supported.
  • I have searched for and ensured there isn't already an open issue regarding this.

Other

Maybe changing column extra data from text to medium text will help

@HyperPaint HyperPaint added the bug Something isn't working label Jul 26, 2024
@HyperPaint
Copy link
Author

HyperPaint commented Jul 26, 2024

its written book with 100 pages...

Text in book moves to extra_data field and then entry can't insert, because extra_data is TEXT type (64 KiB)

@HyperPaint
Copy link
Author

Maybe ignore action like this? And it seems like that mod should check variable size before insert in database and trunc data

@HyperPaint
Copy link
Author

Converted extra_data, block_state and old_block_state to MEDIUMTEXT and problem solved

@ScorNinja
Copy link

Also database collation is limited with the default chosen latin1_swedish_ci. I updated mine to use utf8mb4_general_ci which allows expanded characters in the utf range to be supported.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants