From 4767de66874483c3fe445ecaac18eb2e3e20d23e Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sat, 12 Jan 2019 14:25:17 +0200 Subject: [PATCH] [#860] Fixed MySQL errno 150 Fixed by disabling foreign key checks before applying patches and enabling afterwards. Error was caused by re-creation of plan_sessions table during plan_world_times creation (This was done by the database engine), but plan_sessions was referenced by temp_world_times and so could not be recreated as those references would become invalid. --- .../databases/sql/patches/DiskUsagePatch.java | 2 +- .../sql/patches/GeoInfoLastUsedPatch.java | 2 +- .../sql/patches/GeoInfoOptimizationPatch.java | 2 +- .../databases/sql/patches/IPAnonPatch.java | 2 +- .../databases/sql/patches/IPHashPatch.java | 2 +- .../sql/patches/KillsOptimizationPatch.java | 2 +- .../sql/patches/KillsServerIDPatch.java | 2 +- .../sql/patches/NicknameLastSeenPatch.java | 2 +- .../sql/patches/NicknamesOptimizationPatch.java | 2 +- .../database/databases/sql/patches/Patch.java | 16 +++++++++++++++- .../sql/patches/PingOptimizationPatch.java | 2 +- .../sql/patches/SessionAFKTimePatch.java | 2 +- .../sql/patches/SessionsOptimizationPatch.java | 2 +- .../sql/patches/TransferTableRemovalPatch.java | 2 +- .../sql/patches/UserInfoOptimizationPatch.java | 2 +- .../databases/sql/patches/Version10Patch.java | 2 +- .../sql/patches/VersionTableRemovalPatch.java | 2 +- .../sql/patches/WorldTimesOptimizationPatch.java | 2 +- .../sql/patches/WorldTimesSeverIDPatch.java | 2 +- .../sql/patches/WorldsOptimizationPatch.java | 2 +- .../sql/patches/WorldsServerIDPatch.java | 2 +- .../database/databases/sql/CommonDBTest.java | 2 +- 22 files changed, 36 insertions(+), 22 deletions(-) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/DiskUsagePatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/DiskUsagePatch.java index 3b401420d..77b841fda 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/DiskUsagePatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/DiskUsagePatch.java @@ -31,7 +31,7 @@ public class DiskUsagePatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { addColumn(TPSTable.TABLE_NAME, TPSTable.Col.FREE_DISK + " bigint NOT NULL DEFAULT -1" ); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/GeoInfoLastUsedPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/GeoInfoLastUsedPatch.java index 9d214616b..05a6a47d8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/GeoInfoLastUsedPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/GeoInfoLastUsedPatch.java @@ -31,7 +31,7 @@ public class GeoInfoLastUsedPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { addColumn(GeoInfoTable.TABLE_NAME, GeoInfoTable.Col.LAST_USED + " bigint NOT NULL DEFAULT 0" ); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/GeoInfoOptimizationPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/GeoInfoOptimizationPatch.java index 1aedc5b1f..8728af6a2 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/GeoInfoOptimizationPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/GeoInfoOptimizationPatch.java @@ -41,7 +41,7 @@ public class GeoInfoOptimizationPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { try { tempOldTable(); db.getGeoInfoTable().createTable(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/IPAnonPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/IPAnonPatch.java index b99117f91..0c2a5f635 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/IPAnonPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/IPAnonPatch.java @@ -68,7 +68,7 @@ public class IPAnonPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { Map> allGeoInfo = db.getGeoInfoTable().getAllGeoInfo(); anonymizeIPs(allGeoInfo); groupHashedIPs(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/IPHashPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/IPHashPatch.java index 7b9b44bda..8c18311b2 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/IPHashPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/IPHashPatch.java @@ -31,7 +31,7 @@ public class IPHashPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { addColumn(GeoInfoTable.TABLE_NAME, GeoInfoTable.Col.IP_HASH.get() + " varchar(200) DEFAULT ''"); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/KillsOptimizationPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/KillsOptimizationPatch.java index 1c7383e9b..4fd158e65 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/KillsOptimizationPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/KillsOptimizationPatch.java @@ -44,7 +44,7 @@ public class KillsOptimizationPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { try { tempOldTable(); db.getKillsTable().createTable(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/KillsServerIDPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/KillsServerIDPatch.java index 0a32d6b45..7d4b6eb5e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/KillsServerIDPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/KillsServerIDPatch.java @@ -58,7 +58,7 @@ public class KillsServerIDPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { addColumn(KillsTable.TABLE_NAME, "server_id integer NOT NULL DEFAULT 0"); Map sessionIDServerIDRelation = db.getSessionsTable().getIDServerIDRelation(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/NicknameLastSeenPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/NicknameLastSeenPatch.java index 0ae57ff05..032501ee5 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/NicknameLastSeenPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/NicknameLastSeenPatch.java @@ -41,7 +41,7 @@ public class NicknameLastSeenPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { addColumn(NicknamesTable.TABLE_NAME, NicknamesTable.Col.LAST_USED + " bigint NOT NULL DEFAULT '0'" ); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/NicknamesOptimizationPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/NicknamesOptimizationPatch.java index ac3ff7b13..2612bec6b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/NicknamesOptimizationPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/NicknamesOptimizationPatch.java @@ -42,7 +42,7 @@ public class NicknamesOptimizationPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { try { tempOldTable(); db.getNicknamesTable().createTable(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/Patch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/Patch.java index bfdf24c57..93ca506f9 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/Patch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/Patch.java @@ -45,7 +45,21 @@ public abstract class Patch { public abstract boolean hasBeenApplied(); - public abstract void apply(); + protected abstract void applyPatch(); + + public void apply() { + if (dbType == DBType.MYSQL) disableForeignKeyChecks(); + applyPatch(); + if (dbType == DBType.MYSQL) enableForeignKeyChecks(); + } + + private void enableForeignKeyChecks() { + db.execute("SET FOREIGN_KEY_CHECKS=1"); + } + + private void disableForeignKeyChecks() { + db.execute("SET FOREIGN_KEY_CHECKS=0"); + } public T query(QueryStatement query) { return db.query(query); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/PingOptimizationPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/PingOptimizationPatch.java index 82128d496..d50a36cf0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/PingOptimizationPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/PingOptimizationPatch.java @@ -42,7 +42,7 @@ public class PingOptimizationPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { try { tempOldTable(); db.getPingTable().createTable(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/SessionAFKTimePatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/SessionAFKTimePatch.java index face1c8d0..c16677e1e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/SessionAFKTimePatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/SessionAFKTimePatch.java @@ -31,7 +31,7 @@ public class SessionAFKTimePatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { addColumn(SessionsTable.TABLE_NAME, SessionsTable.Col.AFK_TIME + " bigint NOT NULL DEFAULT 0" ); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/SessionsOptimizationPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/SessionsOptimizationPatch.java index aad5ca4da..1ff75bf5b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/SessionsOptimizationPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/SessionsOptimizationPatch.java @@ -42,7 +42,7 @@ public class SessionsOptimizationPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { try { dropForeignKeys(tableName); ensureNoForeignKeyConstraints(tableName); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/TransferTableRemovalPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/TransferTableRemovalPatch.java index c3c494b31..747fca603 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/TransferTableRemovalPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/TransferTableRemovalPatch.java @@ -30,7 +30,7 @@ public class TransferTableRemovalPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { dropTable("plan_transfer"); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/UserInfoOptimizationPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/UserInfoOptimizationPatch.java index 9b1331a9e..81e01a6b1 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/UserInfoOptimizationPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/UserInfoOptimizationPatch.java @@ -42,7 +42,7 @@ public class UserInfoOptimizationPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { try { tempOldTable(); db.getUserInfoTable().createTable(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/Version10Patch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/Version10Patch.java index 85701d047..52118eea0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/Version10Patch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/Version10Patch.java @@ -37,7 +37,7 @@ public class Version10Patch extends Patch { } @Override - public void apply() { + protected void applyPatch() { try { Optional fetchedServerID = db.getServerTable().getServerID(getServerUUID()); if (!fetchedServerID.isPresent()) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/VersionTableRemovalPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/VersionTableRemovalPatch.java index 5309309fe..351903d76 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/VersionTableRemovalPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/VersionTableRemovalPatch.java @@ -30,7 +30,7 @@ public class VersionTableRemovalPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { dropTable("plan_version"); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldTimesOptimizationPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldTimesOptimizationPatch.java index fcc1c70b6..6fcd86cdf 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldTimesOptimizationPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldTimesOptimizationPatch.java @@ -43,7 +43,7 @@ public class WorldTimesOptimizationPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { try { tempOldTable(); db.getWorldTimesTable().createTable(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldTimesSeverIDPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldTimesSeverIDPatch.java index 07cfed0a5..e2f32f9e6 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldTimesSeverIDPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldTimesSeverIDPatch.java @@ -59,7 +59,7 @@ public class WorldTimesSeverIDPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { Map sessionIDServerIDRelation = db.getSessionsTable().getIDServerIDRelation(); String sql = "UPDATE " + WorldTimesTable.TABLE_NAME + " SET " + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldsOptimizationPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldsOptimizationPatch.java index fda54f94e..3049ec052 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldsOptimizationPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldsOptimizationPatch.java @@ -41,7 +41,7 @@ public class WorldsOptimizationPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { try { dropForeignKeys(tableName); ensureNoForeignKeyConstraints(tableName); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldsServerIDPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldsServerIDPatch.java index de5ea70c9..15298ec4e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldsServerIDPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/patches/WorldsServerIDPatch.java @@ -64,7 +64,7 @@ public class WorldsServerIDPatch extends Patch { } @Override - public void apply() { + protected void applyPatch() { WorldTable worldTable = db.getWorldTable(); List serverUUIDs = db.getServerTable().getServerUUIDs(); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/system/database/databases/sql/CommonDBTest.java b/Plan/common/src/test/java/com/djrapitops/plan/system/database/databases/sql/CommonDBTest.java index dec3ba5bc..6944cca1b 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/system/database/databases/sql/CommonDBTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/system/database/databases/sql/CommonDBTest.java @@ -111,7 +111,7 @@ public abstract class CommonDBTest { } @Override - public void apply() { + public void applyPatch() { dropTable("plan_world_times"); dropTable("plan_kills"); dropTable("plan_sessions");