Skip to content

Commit

Permalink
Added base changes for database migration command (unfinished)
Browse files Browse the repository at this point in the history
  • Loading branch information
Intelli committed Sep 30, 2024
1 parent fc0c8ff commit de978fc
Show file tree
Hide file tree
Showing 14 changed files with 95 additions and 73 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -195,4 +195,7 @@ Desktop.ini
hs_err_pid*

# Documentation dev folder
docs/dev/
docs/dev/

# Extensions
extensions/
2 changes: 2 additions & 0 deletions lang/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ DATABASE_UNREACHABLE: "Database is unreachable. Discarding data and shutting dow
DEVELOPMENT_BRANCH: "Development branch detected, skipping patch scripts."
DIRT_BLOCK: "Placed a temporary safety block under you."
DISABLE_SUCCESS: "Success! Disabled {0}"
DONATION_KEY_REQUIRED: "A valid donation key is required for that command."
ENABLE_FAILED: "{0} was unable to start."
ENABLE_SUCCESS: "{0} has been successfully enabled!"
ENJOY_COREPROTECT: "Enjoy {0}? Join our Discord!"
Expand Down Expand Up @@ -202,6 +203,7 @@ USER_OFFLINE: "The user \"{0}\" is not online."
USING_MYSQL: "Using MySQL for data storage."
USING_SQLITE: "Using SQLite for data storage."
VALID_DONATION_KEY: "Valid donation key."
VERSION_INCOMPATIBLE: "{0} {1} is not supported."
VERSION_NOTICE: "Version {0} is now available."
VERSION_REQUIRED: "{0} {1} or higher is required."
WORLD_NOT_FOUND: "World \"{0}\" not found."
3 changes: 3 additions & 0 deletions src/main/java/net/coreprotect/CoreProtect.java
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,9 @@ private static void safeShutdown(CoreProtect plugin) {
Chat.console(Phrase.build(Phrase.FINISHING_LOGGING));
}

if (ConfigHandler.migrationRunning) {
ConfigHandler.purgeRunning = false;
}
while ((Consumer.isRunning() || ConfigHandler.converterRunning) && !ConfigHandler.purgeRunning) {
long time = System.currentTimeMillis();
if (time >= alertTime) {
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/net/coreprotect/command/CommandHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -1273,6 +1273,21 @@ else if (corecommand.equals("consumer")) {
else if (corecommand.equals("network-debug")) {
NetworkDebugCommand.runCommand(user, permission, argumentArray);
}
else if (corecommand.equals("migrate-db")) {
if (!Util.validDonationKey()) {
Chat.sendMessage(user, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.DONATION_KEY_REQUIRED));
}
else {
try {
Class.forName("net.coreprotect.extensions.DatabaseMigration");
net.coreprotect.extensions.DatabaseMigration.runCommand(user, argumentArray);
}
catch (Exception e) {
// plugin not compiled with extension
Chat.sendMessage(user, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.COMMAND_NOT_FOUND, Color.WHITE, "/co " + corecommand));
}
}
}
else {
Chat.sendMessage(user, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.COMMAND_NOT_FOUND, Color.WHITE, "/co " + corecommand));
}
Expand Down
9 changes: 2 additions & 7 deletions src/main/java/net/coreprotect/command/PurgeCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ protected static void runCommand(final CommandSender player, boolean permission,
return;
}

if (ConfigHandler.converterRunning) {
if (ConfigHandler.converterRunning || ConfigHandler.migrationRunning) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.UPGRADE_IN_PROGRESS));
return;
}
Expand Down Expand Up @@ -104,11 +104,6 @@ else if (endTime < 86400) {
int restrictCount = 0;

if (argBlocks.size() > 0) {
if (!Util.validDonationKey()) {
Chat.sendMessage(player, Color.DARK_AQUA + "CoreProtect " + Color.WHITE + "- " + Phrase.build(Phrase.DONATION_KEY_REQUIRED));
return;
}

StringBuilder includeListMaterial = new StringBuilder();
StringBuilder includeListEntity = new StringBuilder();

Expand Down Expand Up @@ -260,7 +255,7 @@ public void run() {
}
}

Database.createDatabaseTables(purgePrefix, true);
Database.createDatabaseTables(purgePrefix, null, Config.getGlobal().MYSQL, true);
}

List<String> purgeTables = Arrays.asList("sign", "container", "item", "skull", "session", "chat", "command", "entity", "block");
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/net/coreprotect/config/ConfigHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public class ConfigHandler extends Queue {
public static String username = "root";
public static String password = "";
public static String prefix = "co_";
public static String prefixConfig = "co_";
public static int maximumPoolSize = 10;

public static HikariDataSource hikariDataSource = null;
Expand All @@ -65,6 +66,7 @@ public class ConfigHandler extends Queue {
public static volatile boolean serverRunning = false;
public static volatile boolean converterRunning = false;
public static volatile boolean purgeRunning = false;
public static volatile boolean migrationRunning = false;
public static volatile boolean pauseConsumer = false;
public static volatile boolean worldeditEnabled = false;
public static volatile boolean databaseReachable = true;
Expand Down Expand Up @@ -173,6 +175,7 @@ private static void loadConfig() {

// Enforce "co_" table prefix if using SQLite.
if (!Config.getGlobal().MYSQL) {
ConfigHandler.prefixConfig = Config.getGlobal().PREFIX;
Config.getGlobal().PREFIX = "co_";
}

Expand Down Expand Up @@ -259,7 +262,7 @@ public static void loadDatabase() {
ConfigHandler.hikariDataSource = new HikariDataSource(config);
}

Database.createDatabaseTables(ConfigHandler.prefix, false);
Database.createDatabaseTables(ConfigHandler.prefix, null, Config.getGlobal().MYSQL, false);
}

public static void loadTypes(Statement statement) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/coreprotect/consumer/Consumer.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public static boolean isRunning() {

private static void pauseConsumer(int process_id) {
try {
while ((ConfigHandler.serverRunning || ConfigHandler.converterRunning) && (Consumer.isPaused || ConfigHandler.pauseConsumer || ConfigHandler.purgeRunning || Consumer.consumer_id.get(process_id)[1] == 1)) {
while ((ConfigHandler.serverRunning || ConfigHandler.converterRunning || ConfigHandler.migrationRunning) && (Consumer.isPaused || ConfigHandler.pauseConsumer || ConfigHandler.purgeRunning || Consumer.consumer_id.get(process_id)[1] == 1)) {
pausedSuccess = true;
Thread.sleep(100);
}
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/net/coreprotect/consumer/process/Process.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import org.bukkit.Material;

import net.coreprotect.config.Config;
import net.coreprotect.config.ConfigHandler;
import net.coreprotect.consumer.Consumer;
import net.coreprotect.database.Database;
Expand Down Expand Up @@ -74,7 +75,7 @@ protected static void processConsumer(int processId, boolean lastRun) {
}

Statement statement = connection.createStatement();
Database.performCheckpoint(statement);
Database.performCheckpoint(statement, Config.getGlobal().MYSQL);

Consumer.isPaused = true;
ArrayList<Object[]> consumerData = Consumer.consumer.get(processId);
Expand All @@ -91,7 +92,7 @@ protected static void processConsumer(int processId, boolean lastRun) {
return;
}

Database.beginTransaction(statement);
Database.beginTransaction(statement, Config.getGlobal().MYSQL);
// Scan through usernames, ensure everything is loaded in memory.
for (Entry<Integer, String[]> entry : users.entrySet()) {
String[] data = entry.getValue();
Expand All @@ -104,7 +105,7 @@ protected static void processConsumer(int processId, boolean lastRun) {
}
}
updateLockTable(statement, (lastRun ? 0 : 1));
Database.commitTransaction(statement);
Database.commitTransaction(statement, Config.getGlobal().MYSQL);

// Create prepared statements
PreparedStatement preparedStmtSigns = Database.prepareStatement(connection, Database.SIGN, false);
Expand All @@ -123,7 +124,7 @@ protected static void processConsumer(int processId, boolean lastRun) {
PreparedStatement preparedStmtBlockdata = Database.prepareStatement(connection, Database.BLOCKDATA, false);

// Scan through consumer data
Database.beginTransaction(statement);
Database.beginTransaction(statement, Config.getGlobal().MYSQL);
for (int i = 0; i < consumerDataSize; i++) {
Object[] data = consumerData.get(i);
if (data != null) {
Expand Down Expand Up @@ -242,7 +243,7 @@ protected static void processConsumer(int processId, boolean lastRun) {
if (Consumer.interrupt) {
commit(statement, preparedStmtSigns, preparedStmtBlocks, preparedStmtSkulls, preparedStmtContainers, preparedStmtItems, preparedStmtWorlds, preparedStmtChat, preparedStmtCommand, preparedStmtSession, preparedStmtEntities, preparedStmtMaterials, preparedStmtArt, preparedStmtEntity, preparedStmtBlockdata);
Thread.sleep(500);
Database.beginTransaction(statement);
Database.beginTransaction(statement, Config.getGlobal().MYSQL);
}
}
catch (Exception e) {
Expand Down Expand Up @@ -302,7 +303,7 @@ private static void commit(Statement statement, PreparedStatement preparedStmtSi
preparedStmtArt.executeBatch();
preparedStmtEntity.executeBatch();
preparedStmtBlockdata.executeBatch();
Database.commitTransaction(statement);
Database.commitTransaction(statement, Config.getGlobal().MYSQL);
}
catch (Exception e) {
e.printStackTrace();
Expand Down
Loading

0 comments on commit de978fc

Please sign in to comment.