No more updates in MySQL after error - Ran into CompletionException - Column 'server_id' cannot be null
Describe the issue
An exception is thrown in runtime. This happened on one of the MC Paper Server behind a velocity proxy. DB is setup on another server. The DB was up and running and also available for other plan plugin.
The plugin stopped writing into the DB after this error occured
Exceptions & Other Logs
MC Paper logs
[00:48:56] [Plan MySQLDB-transaction-thread-1/ERROR]: [Plan] Ran into CompletionException - logged to plugins\Plan\logs\CompletionException-25b3657dff.txt [00:48:56] [Plan MySQLDB-transaction-thread-1/ERROR]: [Plan] (INCLUDE CONTENTS OF THE FILE IN ANY REPORTS) [00:48:56] [Plan MySQLDB-transaction-thread-1/ERROR]: [Plan] What to do: Report this error. NOT NULL constraint violation occurred.
Plan Logs
25b3657dff - Last occurred: 2025-11-16 Occurrences: 1 ---- Context 1 ---- Plan v5.6 build 2965 Paper 1.21.10-108-97452e1 (MC: 1.21.10) Server v1.21.10-R0.1-SNAPSHOT
Report this error. NOT NULL constraint violation occurred. Transaction: class com.djrapitops.plan.storage.database.transactions.events.ShutdownDataPreservationTransaction DB State: OPEN - fatal: false Error code: 1048 INSERT INTO plan_sessions (user_id,session_start,session_end,deaths,mob_kills,afk_time,server_id,join_address_id) VALUES ((SELECT plan_users.id FROM plan_users WHERE plan_users.uuid=? LIMIT 1), ?, ?, ?, ?, ?, (SELECT plan_servers.id FROM plan_servers WHERE plan_servers.uuid=? LIMIT 1), (SELECT id FROM plan_join_address WHERE join_address=?)) Constraint Violation
---- Stacktrace ---- java.util.concurrent.CompletionException: com.djrapitops.plan.exceptions.database.DBOpException: SQL Failure: Column 'server_id' cannot be null java.base/java.util.concurrent.CompletableFuture.wrapInCompletionException(CompletableFuture.java:323) java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:359) java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:364) java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1791) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) java.base/java.lang.Thread.run(Thread.java:1474) Caused by: com.djrapitops.plan.exceptions.database.DBOpException: SQL Failure: Column 'server_id' cannot be null Plan-5.6-build-2965.jar//com.djrapitops.plan.exceptions.database.DBOpException.forCause(DBOpException.java:153) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.ExecStatement.execute(ExecStatement.java:57) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.queries.LargeStoreQueries.lambda$storeAllSessionsWithKillAndWorldData$0(LargeStoreQueries.java:307) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.Transaction.execute(Transaction.java:223) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.events.ShutdownDataPreservationTransaction.performOperations(ShutdownDataPreservationTransaction.java:42) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.Transaction.executeTransaction(Transaction.java:89) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.SQLDB.lambda$executeTransaction$4(SQLDB.java:374) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.DBAccessLock.performDatabaseOperation(DBAccessLock.java:78) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.DBAccessLock.performDatabaseOperation(DBAccessLock.java:56) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.SQLDB.lambda$executeTransaction$5(SQLDB.java:373) java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1789) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) java.base/java.lang.Thread.run(Thread.java:1474) Caused by: java.sql.BatchUpdateException: Column 'server_id' cannot be null com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:214) com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchWithMultiValuesClause(ClientPreparedStatement.java:782) com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:455) com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:858) Plan-5.6-build-2965.jar//plan.com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:128) Plan-5.6-build-2965.jar//plan.com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeBatch(HikariProxyPreparedStatement.java) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.ExecBatchStatement.callExecute(ExecBatchStatement.java:35) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.ExecStatement.execute(ExecStatement.java:64) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.ExecStatement.execute(ExecStatement.java:55) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.queries.LargeStoreQueries.lambda$storeAllSessionsWithKillAndWorldData$0(LargeStoreQueries.java:307) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.Transaction.execute(Transaction.java:223) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.events.ShutdownDataPreservationTransaction.performOperations(ShutdownDataPreservationTransaction.java:42) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.Transaction.executeTransaction(Transaction.java:89) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.SQLDB.lambda$executeTransaction$4(SQLDB.java:374) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.DBAccessLock.performDatabaseOperation(DBAccessLock.java:78) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.DBAccessLock.performDatabaseOperation(DBAccessLock.java:56) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.SQLDB.lambda$executeTransaction$5(SQLDB.java:373) java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1789) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) java.base/java.lang.Thread.run(Thread.java:1474) Caused by: java.sql.SQLIntegrityConstraintViolationException: Column 'server_id' cannot be null com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:109) com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:114) com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:988) com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1166) com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1101) com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1467) com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchWithMultiValuesClause(ClientPreparedStatement.java:743) com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:455) com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:858) Plan-5.6-build-2965.jar//plan.com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:128) Plan-5.6-build-2965.jar//plan.com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeBatch(HikariProxyPreparedStatement.java) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.ExecBatchStatement.callExecute(ExecBatchStatement.java:35) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.ExecStatement.execute(ExecStatement.java:64) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.ExecStatement.execute(ExecStatement.java:55) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.queries.LargeStoreQueries.lambda$storeAllSessionsWithKillAndWorldData$0(LargeStoreQueries.java:307) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.Transaction.execute(Transaction.java:223) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.events.ShutdownDataPreservationTransaction.performOperations(ShutdownDataPreservationTransaction.java:42) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.transactions.Transaction.executeTransaction(Transaction.java:89) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.SQLDB.lambda$executeTransaction$4(SQLDB.java:374) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.DBAccessLock.performDatabaseOperation(DBAccessLock.java:78) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.DBAccessLock.performDatabaseOperation(DBAccessLock.java:56) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.SQLDB.lambda$executeTransaction$5(SQLDB.java:373) java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1789) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) java.base/java.lang.Thread.run(Thread.java:1474) java.base/java.lang.Thread.getStackTrace(Thread.java:2193) Plan-5.6-build-2965.jar//com.djrapitops.plan.storage.database.SQLDB.executeTransaction(SQLDB.java:360) Plan-5.6-build-2965.jar//com.djrapitops.plan.gathering.ShutdownDataPreservation.storeInDB(ShutdownDataPreservation.java:92) Plan-5.6-build-2965.jar//com.djrapitops.plan.gathering.ShutdownDataPreservation.storePreviouslyPreservedSessions(ShutdownDataPreservation.java:81) Plan-5.6-build-2965.jar//com.djrapitops.plan.gathering.ShutdownDataPreservation.run(ShutdownDataPreservation.java:104) Plan-5.6-build-2965.jar//net.playeranalytics.plugin.scheduling.UnscheduledBukkitTask.run(UnscheduledBukkitTask.java:22) org.bukkit.craftbukkit.scheduler.CraftTask.run(CraftTask.java:78) org.bukkit.craftbukkit.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) java.base/java.lang.Thread.run(Thread.java:1474)
Plugin versions
Additional information
The server row somehow disappeared from the database 🤔 - This can happen if /plan db clear is run or someone goes in manually and deletes it or changes the server uuid column in there