diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java index f4928726..172df2d2 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java @@ -71,7 +71,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.storage.Storage; import me.lucko.luckperms.common.storage.StorageFactory; import me.lucko.luckperms.common.storage.StorageType; -import me.lucko.luckperms.common.storage.backing.file.FileWatcher; +import me.lucko.luckperms.common.storage.dao.file.FileWatcher; import me.lucko.luckperms.common.tasks.CacheHousekeepingTask; import me.lucko.luckperms.common.tasks.ExpireTemporaryTask; import me.lucko.luckperms.common.tasks.UpdateTask; diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java index d71e0610..62bba40c 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java @@ -67,7 +67,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsScheduler; import me.lucko.luckperms.common.storage.Storage; import me.lucko.luckperms.common.storage.StorageFactory; import me.lucko.luckperms.common.storage.StorageType; -import me.lucko.luckperms.common.storage.backing.file.FileWatcher; +import me.lucko.luckperms.common.storage.dao.file.FileWatcher; import me.lucko.luckperms.common.tasks.CacheHousekeepingTask; import me.lucko.luckperms.common.tasks.ExpireTemporaryTask; import me.lucko.luckperms.common.tasks.UpdateTask; diff --git a/common/src/main/java/me/lucko/luckperms/common/plugin/LuckPermsPlugin.java b/common/src/main/java/me/lucko/luckperms/common/plugin/LuckPermsPlugin.java index c2a545bf..dc7e4670 100644 --- a/common/src/main/java/me/lucko/luckperms/common/plugin/LuckPermsPlugin.java +++ b/common/src/main/java/me/lucko/luckperms/common/plugin/LuckPermsPlugin.java @@ -47,7 +47,7 @@ import me.lucko.luckperms.common.managers.UserManager; import me.lucko.luckperms.common.messaging.InternalMessagingService; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.storage.Storage; -import me.lucko.luckperms.common.storage.backing.file.FileWatcher; +import me.lucko.luckperms.common.storage.dao.file.FileWatcher; import me.lucko.luckperms.common.treeview.PermissionVault; import me.lucko.luckperms.common.utils.UuidCache; import me.lucko.luckperms.common.verbose.VerboseHandler; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java index d8eed50c..0558b70d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java @@ -41,7 +41,7 @@ import me.lucko.luckperms.common.model.Group; import me.lucko.luckperms.common.model.Track; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.backing.AbstractDao; +import me.lucko.luckperms.common.storage.dao.AbstractDao; import me.lucko.luckperms.common.storage.wrappings.BufferedOutputStorage; import me.lucko.luckperms.common.storage.wrappings.PhasedStorage; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/StorageFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/StorageFactory.java index c22a8be6..f8e75962 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/StorageFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/StorageFactory.java @@ -31,16 +31,18 @@ import com.google.common.collect.ImmutableSet; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.backing.AbstractDao; -import me.lucko.luckperms.common.storage.backing.file.HoconDao; -import me.lucko.luckperms.common.storage.backing.file.JsonDao; -import me.lucko.luckperms.common.storage.backing.file.YamlDao; -import me.lucko.luckperms.common.storage.backing.mongodb.MongoDao; -import me.lucko.luckperms.common.storage.backing.sql.SqlDao; -import me.lucko.luckperms.common.storage.backing.sql.provider.file.H2ConnectionFactory; -import me.lucko.luckperms.common.storage.backing.sql.provider.file.SQLiteConnectionFactory; -import me.lucko.luckperms.common.storage.backing.sql.provider.remote.MySqlConnectionFactory; -import me.lucko.luckperms.common.storage.backing.sql.provider.remote.PostgreConnectionFactory; +import me.lucko.luckperms.common.storage.dao.AbstractDao; +import me.lucko.luckperms.common.storage.dao.SplitStorageDao; +import me.lucko.luckperms.common.storage.dao.file.HoconDao; +import me.lucko.luckperms.common.storage.dao.file.JsonDao; +import me.lucko.luckperms.common.storage.dao.file.YamlDao; +import me.lucko.luckperms.common.storage.dao.mongodb.MongoDao; +import me.lucko.luckperms.common.storage.dao.sql.SqlDao; +import me.lucko.luckperms.common.storage.dao.sql.connection.file.H2ConnectionFactory; +import me.lucko.luckperms.common.storage.dao.sql.connection.file.SQLiteConnectionFactory; +import me.lucko.luckperms.common.storage.dao.sql.connection.hikari.MariaDbConnectionFactory; +import me.lucko.luckperms.common.storage.dao.sql.connection.hikari.MySqlConnectionFactory; +import me.lucko.luckperms.common.storage.dao.sql.connection.hikari.PostgreConnectionFactory; import me.lucko.luckperms.common.utils.ImmutableCollectors; import java.io.File; @@ -121,16 +123,12 @@ public class StorageFactory { private static AbstractDao makeDao(StorageType method, LuckPermsPlugin plugin) { switch (method) { case MARIADB: - return new SqlDao(plugin, new MySqlConnectionFactory( - "MariaDB", - "org.mariadb.jdbc.MySQLDataSource", + return new SqlDao(plugin, new MariaDbConnectionFactory( plugin.getConfiguration().get(ConfigKeys.DATABASE_VALUES)), plugin.getConfiguration().get(ConfigKeys.SQL_TABLE_PREFIX) ); case MYSQL: return new SqlDao(plugin, new MySqlConnectionFactory( - "MySQL", - "com.mysql.jdbc.jdbc2.optional.MysqlDataSource", plugin.getConfiguration().get(ConfigKeys.DATABASE_VALUES)), plugin.getConfiguration().get(ConfigKeys.SQL_TABLE_PREFIX) ); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/remote/MySqlConnectionFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/remote/MySqlConnectionFactory.java deleted file mode 100644 index 4af0cf19..00000000 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/remote/MySqlConnectionFactory.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * This file is part of LuckPerms, licensed under the MIT License. - * - * Copyright (c) lucko (Luck) - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package me.lucko.luckperms.common.storage.backing.sql.provider.remote; - -import com.zaxxer.hikari.HikariConfig; -import com.zaxxer.hikari.HikariDataSource; - -import me.lucko.luckperms.common.storage.DatastoreConfiguration; -import me.lucko.luckperms.common.storage.backing.sql.provider.AbstractConnectionFactory; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -public class MySqlConnectionFactory extends AbstractConnectionFactory { - - private final DatastoreConfiguration configuration; - private final String driverClass; - private HikariDataSource hikari; - - public MySqlConnectionFactory(String name, String driverClass, DatastoreConfiguration configuration) { - super(name); - this.configuration = configuration; - this.driverClass = driverClass; - } - - @Override - public void init() { - HikariConfig config = new HikariConfig(); - - String address = configuration.getAddress(); - String[] addressSplit = address.split(":"); - address = addressSplit[0]; - String port = addressSplit.length > 1 ? addressSplit[1] : "3306"; - - String database = configuration.getDatabase(); - String username = configuration.getUsername(); - String password = configuration.getPassword(); - - config.setMaximumPoolSize(configuration.getPoolSize()); - - config.setPoolName("luckperms"); - config.setDataSourceClassName(driverClass); - config.addDataSourceProperty("serverName", address); - config.addDataSourceProperty("port", port); - config.addDataSourceProperty("databaseName", database); - config.setUsername(username); - config.setPassword(password); - - if (!getName().toLowerCase().equals("mariadb")) { - - // doesn't exist on the MariaDB driver - config.addDataSourceProperty("cachePrepStmts", "true"); - config.addDataSourceProperty("alwaysSendSetIsolation", "false"); - config.addDataSourceProperty("cacheServerConfiguration", "true"); - config.addDataSourceProperty("elideSetAutoCommits", "true"); - config.addDataSourceProperty("useLocalSessionState", "true"); - - // already set as default on mariadb - config.addDataSourceProperty("useServerPrepStmts", "true"); - config.addDataSourceProperty("prepStmtCacheSize", "250"); - config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); - config.addDataSourceProperty("cacheCallableStmts", "true"); - - // make sure unicode characters can be used. - config.addDataSourceProperty("characterEncoding", "utf8"); - config.addDataSourceProperty("useUnicode", "true"); - } else { - // hack for mariadb. this will call #setProperties on the datasource, which will append these options - // onto the connections. - config.addDataSourceProperty("properties", "useUnicode=true;characterEncoding=utf8"); - } - - // We will wait for 15 seconds to get a connection from the pool. - // Default is 30, but it shouldn't be taking that long. - config.setConnectionTimeout(TimeUnit.SECONDS.toMillis(15)); // 15000 - - // If a connection is not returned within 10 seconds, it's probably safe to assume it's been leaked. - config.setLeakDetectionThreshold(TimeUnit.SECONDS.toMillis(10)); // 10000 - - // The drivers are really old in some of the older Spigot binaries, so Connection#isValid doesn't work. - config.setConnectionTestQuery("/* LuckPerms ping */ SELECT 1"); - - hikari = new HikariDataSource(config); - } - - @Override - public void shutdown() throws Exception { - if (hikari != null) { - hikari.close(); - } - } - - @Override - public Map getMeta() { - Map ret = new LinkedHashMap<>(); - boolean success = true; - - long start = System.currentTimeMillis(); - try (Connection c = hikari.getConnection()) { - try (Statement s = c.createStatement()) { - s.execute("/* ping */ SELECT 1"); - } - } catch (SQLException e) { - success = false; - } - long duration = System.currentTimeMillis() - start; - - if (success) { - ret.put("Ping", "&a" + duration + "ms"); - ret.put("Connected", "true"); - } else { - ret.put("Connected", "false"); - } - - return ret; - } - - @Override - public Connection getConnection() throws SQLException { - Connection connection = hikari.getConnection(); - if (connection == null) { - throw new SQLException("Unable to get a connection from the pool."); - } - return connection; - } -} diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/AbstractDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/AbstractDao.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/AbstractDao.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/AbstractDao.java index 59b13786..e8561364 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/AbstractDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/AbstractDao.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing; +package me.lucko.luckperms.common.storage.dao; import lombok.AccessLevel; import lombok.Getter; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/SplitStorageDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/SplitStorageDao.java similarity index 96% rename from common/src/main/java/me/lucko/luckperms/common/storage/SplitStorageDao.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/SplitStorageDao.java index 344e1749..2ff0fb5f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/SplitStorageDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/SplitStorageDao.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage; +package me.lucko.luckperms.common.storage.dao; import com.google.common.collect.ImmutableMap; @@ -35,7 +35,6 @@ import me.lucko.luckperms.common.model.Group; import me.lucko.luckperms.common.model.Track; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.backing.AbstractDao; import java.util.LinkedHashMap; import java.util.List; @@ -47,7 +46,7 @@ public class SplitStorageDao extends AbstractDao { private final Map backing; private final Map types; - protected SplitStorageDao(LuckPermsPlugin plugin, Map backing, Map types) { + public SplitStorageDao(LuckPermsPlugin plugin, Map backing, Map types) { super(plugin, "Split Storage"); this.backing = ImmutableMap.copyOf(backing); this.types = ImmutableMap.copyOf(types); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/ConfigurateDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/ConfigurateDao.java similarity index 99% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/file/ConfigurateDao.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/file/ConfigurateDao.java index 9f5c6080..4be8442b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/ConfigurateDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/ConfigurateDao.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.file; +package me.lucko.luckperms.common.storage.dao.file; import lombok.Getter; @@ -50,9 +50,9 @@ import me.lucko.luckperms.common.node.NodeHeldPermission; import me.lucko.luckperms.common.node.NodeModel; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.references.UserIdentifier; -import me.lucko.luckperms.common.storage.backing.AbstractDao; -import me.lucko.luckperms.common.storage.backing.legacy.LegacyJsonMigration; -import me.lucko.luckperms.common.storage.backing.legacy.LegacyYamlMigration; +import me.lucko.luckperms.common.storage.dao.AbstractDao; +import me.lucko.luckperms.common.storage.dao.legacy.LegacyJsonMigration; +import me.lucko.luckperms.common.storage.dao.legacy.LegacyYamlMigration; import ninja.leaping.configurate.ConfigurationNode; import ninja.leaping.configurate.SimpleConfigurationNode; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/FileUuidCache.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileUuidCache.java similarity index 99% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/file/FileUuidCache.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileUuidCache.java index d19a53dc..c54954c7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/FileUuidCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileUuidCache.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.file; +package me.lucko.luckperms.common.storage.dao.file; import com.google.common.base.Splitter; import com.google.common.collect.Maps; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/FileWatcher.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileWatcher.java similarity index 99% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/file/FileWatcher.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileWatcher.java index 463875cd..a525cbc1 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/FileWatcher.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileWatcher.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.file; +package me.lucko.luckperms.common.storage.dao.file; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/HoconDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/HoconDao.java similarity index 97% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/file/HoconDao.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/file/HoconDao.java index dc5b661d..abff4b41 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/HoconDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/HoconDao.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.file; +package me.lucko.luckperms.common.storage.dao.file; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/JsonDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/JsonDao.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/file/JsonDao.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/file/JsonDao.java index 514b61d1..2c7c966f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/JsonDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/JsonDao.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.file; +package me.lucko.luckperms.common.storage.dao.file; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/StorageLocation.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/StorageLocation.java similarity index 95% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/file/StorageLocation.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/file/StorageLocation.java index c7437fa1..c10453a7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/StorageLocation.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/StorageLocation.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.file; +package me.lucko.luckperms.common.storage.dao.file; public enum StorageLocation { diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/YamlDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/YamlDao.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/file/YamlDao.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/file/YamlDao.java index 886bf607..12139904 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/file/YamlDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/YamlDao.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.file; +package me.lucko.luckperms.common.storage.dao.file; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/legacy/LegacyJsonMigration.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyJsonMigration.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/legacy/LegacyJsonMigration.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyJsonMigration.java index 6b26b87b..17f3e1d0 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/legacy/LegacyJsonMigration.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyJsonMigration.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.legacy; +package me.lucko.luckperms.common.storage.dao.legacy; import lombok.RequiredArgsConstructor; @@ -38,7 +38,7 @@ import me.lucko.luckperms.common.contexts.ContextSetJsonSerializer; import me.lucko.luckperms.common.node.NodeFactory; import me.lucko.luckperms.common.node.NodeModel; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.backing.file.JsonDao; +import me.lucko.luckperms.common.storage.dao.file.JsonDao; import java.io.BufferedReader; import java.io.BufferedWriter; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/legacy/LegacySqlMigration.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacySqlMigration.java similarity index 99% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/legacy/LegacySqlMigration.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacySqlMigration.java index b95f0386..43a42b40 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/legacy/LegacySqlMigration.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacySqlMigration.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.legacy; +package me.lucko.luckperms.common.storage.dao.legacy; import lombok.RequiredArgsConstructor; @@ -33,7 +33,7 @@ import com.google.gson.reflect.TypeToken; import me.lucko.luckperms.common.contexts.ContextSetJsonSerializer; import me.lucko.luckperms.common.node.NodeFactory; import me.lucko.luckperms.common.node.NodeModel; -import me.lucko.luckperms.common.storage.backing.sql.SqlDao; +import me.lucko.luckperms.common.storage.dao.sql.SqlDao; import java.lang.reflect.Type; import java.sql.Connection; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/legacy/LegacyYamlMigration.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyYamlMigration.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/legacy/LegacyYamlMigration.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyYamlMigration.java index efb7dc49..f85cb34a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/legacy/LegacyYamlMigration.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyYamlMigration.java @@ -23,14 +23,14 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.legacy; +package me.lucko.luckperms.common.storage.dao.legacy; import lombok.RequiredArgsConstructor; import me.lucko.luckperms.common.node.NodeFactory; import me.lucko.luckperms.common.node.NodeModel; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.backing.file.YamlDao; +import me.lucko.luckperms.common.storage.dao.file.YamlDao; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/mongodb/MongoDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java similarity index 99% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/mongodb/MongoDao.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java index 7f42fd09..2b03e15e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/mongodb/MongoDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.mongodb; +package me.lucko.luckperms.common.storage.dao.mongodb; import lombok.Getter; @@ -53,7 +53,7 @@ import me.lucko.luckperms.common.node.NodeModel; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.references.UserIdentifier; import me.lucko.luckperms.common.storage.DatastoreConfiguration; -import me.lucko.luckperms.common.storage.backing.AbstractDao; +import me.lucko.luckperms.common.storage.dao.AbstractDao; import org.bson.Document; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/SqlDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java similarity index 99% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/SqlDao.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java index 302b89c6..4b763bf8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/SqlDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.sql; +package me.lucko.luckperms.common.storage.dao.sql; import lombok.Getter; @@ -49,9 +49,9 @@ import me.lucko.luckperms.common.node.NodeHeldPermission; import me.lucko.luckperms.common.node.NodeModel; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.references.UserIdentifier; -import me.lucko.luckperms.common.storage.backing.AbstractDao; -import me.lucko.luckperms.common.storage.backing.legacy.LegacySqlMigration; -import me.lucko.luckperms.common.storage.backing.sql.provider.AbstractConnectionFactory; +import me.lucko.luckperms.common.storage.dao.AbstractDao; +import me.lucko.luckperms.common.storage.dao.legacy.LegacySqlMigration; +import me.lucko.luckperms.common.storage.dao.sql.connection.AbstractConnectionFactory; import java.io.BufferedReader; import java.io.InputStream; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/AbstractConnectionFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/AbstractConnectionFactory.java similarity index 96% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/AbstractConnectionFactory.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/AbstractConnectionFactory.java index 062e290c..5094b8d5 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/AbstractConnectionFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/AbstractConnectionFactory.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.sql.provider; +package me.lucko.luckperms.common.storage.dao.sql.connection; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/FlatfileConnectionFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/FlatfileConnectionFactory.java similarity index 94% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/FlatfileConnectionFactory.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/FlatfileConnectionFactory.java index 12f0edac..1bc686d5 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/FlatfileConnectionFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/FlatfileConnectionFactory.java @@ -23,9 +23,9 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.sql.provider.file; +package me.lucko.luckperms.common.storage.dao.sql.connection.file; -import me.lucko.luckperms.common.storage.backing.sql.provider.AbstractConnectionFactory; +import me.lucko.luckperms.common.storage.dao.sql.connection.AbstractConnectionFactory; import java.io.File; import java.sql.Connection; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/H2ConnectionFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/H2ConnectionFactory.java similarity index 97% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/H2ConnectionFactory.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/H2ConnectionFactory.java index 415e79cc..e0eefb31 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/H2ConnectionFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/H2ConnectionFactory.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.sql.provider.file; +package me.lucko.luckperms.common.storage.dao.sql.connection.file; import java.io.File; import java.util.LinkedHashMap; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/NonClosableConnection.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/NonClosableConnection.java similarity index 96% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/NonClosableConnection.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/NonClosableConnection.java index fdfd3e63..cbcfbce1 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/NonClosableConnection.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/NonClosableConnection.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.sql.provider.file; +package me.lucko.luckperms.common.storage.dao.sql.connection.file; import lombok.AllArgsConstructor; import lombok.experimental.Delegate; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/SQLiteConnectionFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/SQLiteConnectionFactory.java similarity index 97% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/SQLiteConnectionFactory.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/SQLiteConnectionFactory.java index 6e552553..24cb53e1 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/file/SQLiteConnectionFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/file/SQLiteConnectionFactory.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.sql.provider.file; +package me.lucko.luckperms.common.storage.dao.sql.connection.file; import java.io.File; import java.util.LinkedHashMap; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/remote/PostgreConnectionFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/HikariConnectionFactory.java similarity index 80% rename from common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/remote/PostgreConnectionFactory.java rename to common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/HikariConnectionFactory.java index c4b7de8f..519a01fb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/sql/provider/remote/PostgreConnectionFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/HikariConnectionFactory.java @@ -23,13 +23,13 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage.backing.sql.provider.remote; +package me.lucko.luckperms.common.storage.dao.sql.connection.hikari; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import me.lucko.luckperms.common.storage.DatastoreConfiguration; -import me.lucko.luckperms.common.storage.backing.sql.provider.AbstractConnectionFactory; +import me.lucko.luckperms.common.storage.dao.sql.connection.AbstractConnectionFactory; import java.sql.Connection; import java.sql.SQLException; @@ -38,38 +38,46 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.TimeUnit; -public class PostgreConnectionFactory extends AbstractConnectionFactory { +public abstract class HikariConnectionFactory extends AbstractConnectionFactory { - private final DatastoreConfiguration configuration; + protected final DatastoreConfiguration configuration; private HikariDataSource hikari; - public PostgreConnectionFactory(DatastoreConfiguration configuration) { - super("PostgreSQL"); + public HikariConnectionFactory(String name, DatastoreConfiguration configuration) { + super(name); this.configuration = configuration; } - @Override - public void init() { - HikariConfig config = new HikariConfig(); + protected abstract String getDriverClass(); + protected abstract void appendProperties(HikariConfig config); + + protected void appendConfigurationInfo(HikariConfig config) { String address = configuration.getAddress(); String[] addressSplit = address.split(":"); address = addressSplit[0]; - String port = addressSplit.length > 1 ? addressSplit[1] : "5432"; + String port = addressSplit.length > 1 ? addressSplit[1] : "3306"; String database = configuration.getDatabase(); String username = configuration.getUsername(); String password = configuration.getPassword(); config.setMaximumPoolSize(configuration.getPoolSize()); - - config.setPoolName("luckperms"); - config.setDataSourceClassName("org.postgresql.ds.PGSimpleDataSource"); + config.setDataSourceClassName(getDriverClass()); config.addDataSourceProperty("serverName", address); - config.addDataSourceProperty("portNumber", port); + config.addDataSourceProperty("port", port); config.addDataSourceProperty("databaseName", database); - config.addDataSourceProperty("user", username); - config.addDataSourceProperty("password", password); + config.setUsername(username); + config.setPassword(password); + } + + @Override + public void init() { + HikariConfig config = new HikariConfig(); + config.setPoolName("luckperms"); + + appendConfigurationInfo(config); + appendProperties(config); // We will wait for 15 seconds to get a connection from the pool. // Default is 30, but it shouldn't be taking that long. @@ -78,7 +86,7 @@ public class PostgreConnectionFactory extends AbstractConnectionFactory { // If a connection is not returned within 10 seconds, it's probably safe to assume it's been leaked. config.setLeakDetectionThreshold(TimeUnit.SECONDS.toMillis(10)); // 10000 - // Just in-case the driver isn't JDBC4+ + // The drivers are really old in some of the older Spigot binaries, so Connection#isValid doesn't work. config.setConnectionTestQuery("/* LuckPerms ping */ SELECT 1"); hikari = new HikariDataSource(config); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/MariaDbConnectionFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/MariaDbConnectionFactory.java new file mode 100644 index 00000000..634b3339 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/MariaDbConnectionFactory.java @@ -0,0 +1,58 @@ +/* + * This file is part of LuckPerms, licensed under the MIT License. + * + * Copyright (c) lucko (Luck) + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.storage.dao.sql.connection.hikari; + +import com.zaxxer.hikari.HikariConfig; + +import me.lucko.luckperms.common.storage.DatastoreConfiguration; + +public class MariaDbConnectionFactory extends HikariConnectionFactory { + public MariaDbConnectionFactory(DatastoreConfiguration configuration) { + super("MariaDB", configuration); + } + + @Override + protected String getDriverClass() { + return classExists("org.mariadb.jdbc.MariaDbDataSource") ? "org.mariadb.jdbc.MariaDbDataSource" : "org.mariadb.jdbc.MySQLDataSource"; + } + + @Override + protected void appendProperties(HikariConfig config) { + // kinda hacky. this will call #setProperties on the datasource, which will append these options + // onto the connections. + config.addDataSourceProperty("properties", "useUnicode=true;characterEncoding=utf8"); + } + + private static boolean classExists(String clazz) { + try { + Class.forName(clazz); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/MySqlConnectionFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/MySqlConnectionFactory.java new file mode 100644 index 00000000..dd4318a6 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/MySqlConnectionFactory.java @@ -0,0 +1,60 @@ +/* + * This file is part of LuckPerms, licensed under the MIT License. + * + * Copyright (c) lucko (Luck) + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.storage.dao.sql.connection.hikari; + +import com.zaxxer.hikari.HikariConfig; + +import me.lucko.luckperms.common.storage.DatastoreConfiguration; + +public class MySqlConnectionFactory extends HikariConnectionFactory { + public MySqlConnectionFactory(DatastoreConfiguration configuration) { + super("MySQL", configuration); + } + + @Override + protected String getDriverClass() { + return "com.mysql.jdbc.jdbc2.optional.MysqlDataSource"; + } + + @Override + protected void appendProperties(HikariConfig config) { + config.addDataSourceProperty("cachePrepStmts", "true"); + config.addDataSourceProperty("alwaysSendSetIsolation", "false"); + config.addDataSourceProperty("cacheServerConfiguration", "true"); + config.addDataSourceProperty("elideSetAutoCommits", "true"); + config.addDataSourceProperty("useLocalSessionState", "true"); + + config.addDataSourceProperty("useServerPrepStmts", "true"); + config.addDataSourceProperty("prepStmtCacheSize", "250"); + config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); + config.addDataSourceProperty("cacheCallableStmts", "true"); + + // make sure unicode characters can be used. + config.addDataSourceProperty("characterEncoding", "utf8"); + config.addDataSourceProperty("useUnicode", "true"); + } + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/PostgreConnectionFactory.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/PostgreConnectionFactory.java new file mode 100644 index 00000000..8a97adba --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/connection/hikari/PostgreConnectionFactory.java @@ -0,0 +1,67 @@ +/* + * This file is part of LuckPerms, licensed under the MIT License. + * + * Copyright (c) lucko (Luck) + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.storage.dao.sql.connection.hikari; + +import com.zaxxer.hikari.HikariConfig; + +import me.lucko.luckperms.common.storage.DatastoreConfiguration; + +public class PostgreConnectionFactory extends HikariConnectionFactory { + public PostgreConnectionFactory(DatastoreConfiguration configuration) { + super("PostgreSQL", configuration); + } + + @Override + protected String getDriverClass() { + return "org.postgresql.ds.PGSimpleDataSource"; + } + + @Override + protected void appendProperties(HikariConfig config) { + + } + + @Override + protected void appendConfigurationInfo(HikariConfig config) { + String address = configuration.getAddress(); + String[] addressSplit = address.split(":"); + address = addressSplit[0]; + String port = addressSplit.length > 1 ? addressSplit[1] : "5432"; + + String database = configuration.getDatabase(); + String username = configuration.getUsername(); + String password = configuration.getPassword(); + + config.setMaximumPoolSize(configuration.getPoolSize()); + config.setDataSourceClassName(getDriverClass()); + config.addDataSourceProperty("serverName", address); + config.addDataSourceProperty("portNumber", port); + config.addDataSourceProperty("databaseName", database); + config.addDataSourceProperty("user", username); + config.addDataSourceProperty("password", password); + } + +} diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java index c6a55548..27833fcc 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java @@ -62,7 +62,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsScheduler; import me.lucko.luckperms.common.storage.Storage; import me.lucko.luckperms.common.storage.StorageFactory; import me.lucko.luckperms.common.storage.StorageType; -import me.lucko.luckperms.common.storage.backing.file.FileWatcher; +import me.lucko.luckperms.common.storage.dao.file.FileWatcher; import me.lucko.luckperms.common.tasks.CacheHousekeepingTask; import me.lucko.luckperms.common.tasks.ExpireTemporaryTask; import me.lucko.luckperms.common.tasks.UpdateTask;