PyvesB / advanced-achievements

:fireworks: Popular plugin that adds unique and challenging achievements to Minecraft servers.
https://www.spigotmc.org/resources/83466
GNU General Public License v3.0
200 stars 214 forks source link

h2 database error #1044

Closed TheLaoming closed 3 years ago

TheLaoming commented 3 years ago

:information_source: Basic information

:beetle: Description

So, basically sometimes the ach plugin get disabled due to database error. I don't actually know what's it, but it happens at least once or twice per week. Maybe the db reached the limit of size or something? I had no issues like this for almost a half year of using.

:page_facing_up: Server logs

[06:26:56] [Server thread/INFO]: [AdvancedAchievements] Enabling AdvancedAchievements v7.1.0
[06:26:56] [Server thread/INFO]: [AdvancedAchievements] Backing up and loading configuration files...
[06:26:56] [Server thread/INFO]: [AdvancedAchievements] Loaded 119 achievements in 46 categories.
[06:26:56] [Server thread/INFO]: [AdvancedAchievements] 7 disabled categories: [Custom, PlayerCommands, Commands, Treasures, AdvancementsCompleted, PetMasterGive, PetMasterReceive]
[06:26:56] [Server thread/INFO]: [AdvancedAchievements] Registering event listeners...
[06:26:56] [Server thread/INFO]: [AdvancedAchievements] Initialising h2 database...
[06:26:56] [Server thread/ERROR]: [AdvancedAchievements] Error while attempting to retrieve a connection to the database:
com.hm.h2.jdbc.JdbcSQLNonTransientConnectionException: (Message 90020 not found) [90020-200]
    at com.hm.h2.message.DbException.getJdbcSQLException(DbException.java:622) ~[?:?]
    at com.hm.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[?:?]
    at com.hm.h2.message.DbException.get(DbException.java:194) ~[?:?]
    at com.hm.h2.mvstore.db.MVTableEngine$Store.convertIllegalStateException(MVTableEngine.java:206) ~[?:?]
    at com.hm.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:182) ~[?:?]
    at com.hm.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:103) ~[?:?]
    at com.hm.h2.engine.Database.getPageStore(Database.java:2659) ~[?:?]
    at com.hm.h2.engine.Database.open(Database.java:675) ~[?:?]
    at com.hm.h2.engine.Database.openDatabase(Database.java:307) ~[?:?]
    at com.hm.h2.engine.Database.<init>(Database.java:301) ~[?:?]
    at com.hm.h2.engine.Engine.openSession(Engine.java:74) ~[?:?]
    at com.hm.h2.engine.Engine.openSession(Engine.java:192) ~[?:?]
    at com.hm.h2.engine.Engine.createSessionAndValidate(Engine.java:171) ~[?:?]
    at com.hm.h2.engine.Engine.createSession(Engine.java:166) ~[?:?]
    at com.hm.h2.engine.Engine.createSession(Engine.java:29) ~[?:?]
    at com.hm.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[?:?]
    at com.hm.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:173) ~[?:?]
    at com.hm.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:152) ~[?:?]
    at com.hm.h2.Driver.connect(Driver.java:69) ~[?:?]
    at java.sql.DriverManager.getConnection(DriverManager.java:677) ~[java.sql:?]
    at java.sql.DriverManager.getConnection(DriverManager.java:251) ~[java.sql:?]
    at com.hm.achievement.db.AbstractFileDatabaseManager.createConnection(AbstractFileDatabaseManager.java:63) ~[?:?]
    at com.hm.achievement.db.AbstractDatabaseManager.getConnection(AbstractDatabaseManager.java:160) ~[?:?]
    at com.hm.achievement.db.AbstractDatabaseManager.initialise(AbstractDatabaseManager.java:100) ~[?:?]
    at com.hm.achievement.lifecycle.PluginLoader.loadAdvancedAchievements(PluginLoader.java:136) ~[?:?]
    at com.hm.achievement.AdvancedAchievements.onEnable(AdvancedAchievements.java:49) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:518) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:432) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:596) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:321) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1078) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:293) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at java.lang.Thread.run(Thread.java:831) [?:?]
Caused by: java.lang.IllegalStateException: The file is locked: nio:/hlserver/27985/plugins/AdvancedAchievements/achievements.mv.db [1.4.200/7]
    at com.hm.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950) ~[?:?]
    at com.hm.h2.mvstore.FileStore.open(FileStore.java:172) ~[?:?]
    at com.hm.h2.mvstore.MVStore.<init>(MVStore.java:381) ~[?:?]
    at com.hm.h2.mvstore.MVStore$Builder.open(MVStore.java:3579) ~[?:?]
    at com.hm.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:170) ~[?:?]
    ... 31 more
[06:26:56] [Server thread/ERROR]: [AdvancedAchievements] A non recoverable error was encountered while loading the plugin, disabling it:
com.hm.achievement.exception.PluginLoadError: Failed to establish database connection. Please verify your settings in config.yml.
    at com.hm.achievement.db.AbstractDatabaseManager.initialise(AbstractDatabaseManager.java:101) ~[?:?]
    at com.hm.achievement.lifecycle.PluginLoader.loadAdvancedAchievements(PluginLoader.java:136) ~[?:?]
    at com.hm.achievement.AdvancedAchievements.onEnable(AdvancedAchievements.java:49) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:518) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:432) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:596) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:321) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1078) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:293) ~[patched_1.16.5.jar:git-Yatopia-ver/1.16.5-120]
    at java.lang.Thread.run(Thread.java:831) [?:?]
[06:26:56] [Server thread/INFO]: [AdvancedAchievements] Disabling AdvancedAchievements v7.1.0
[06:26:56] [Server thread/INFO]: [AdvancedAchievements] Remaining requests sent to the database, plugin successfully disabled.

:wrench: Configuration

DatabaseBackup: true

# Database type, sqlite, h2, postgresql or mysql. Do a full server restart for this to take effect.
DatabaseType: h2

# Prefix added to the tables in the database. If you switch from the default tables names (no prefix),
# the plugin will attempt an automatic renaming. Otherwise you have to rename your tables manually.
# Do a full server restart for this to take effect.
TablePrefix: ''

# Specify additional options when opening a connection to a MySQL/PostgreSQL database. Start each option with &,
# for instance "&useUnicode=yes&characterEncoding=UTF-8". Make sure the key-value pairs themselves are URL encoded.
AdditionalConnectionOptions: '&useUnicode=yes&characterEncoding=UTF-8'

I have setup the h2 database settings and using them all the time, since I tried this plugin (maybe 4 months). I'm using 2 servers with two different versions of ach and also two different mc versions. Both has this issue with h2. I tried to switch on sql and it has been a week and it looks like it works.

How to fix it? Just easily restart the server, or you can use /plugman reload advancedachievements (yeah probably not supported, but it actually works).

PyvesB commented 3 years ago

Hello @TheLaoming ! 👋🏻

If my understanding is correct, you've switched to SQLite and your issue no longer occurs?

H2 locks the database file when performing database operations. If the server crashes unexpectedly or if your replace the plugin JAR when the server is running, this can cause it to fail to release the lock. You then need to go into the Advanced Achievements folder and manually delete the lock file.