diff --git a/server/src/com/cloud/upgrade/dao/Upgrade228to229.java b/server/src/com/cloud/upgrade/dao/Upgrade228to229.java index f626c8c6f07..df97b079b5e 100644 --- a/server/src/com/cloud/upgrade/dao/Upgrade228to229.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade228to229.java @@ -19,6 +19,9 @@ package com.cloud.upgrade.dao; import java.io.File; import java.sql.Connection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import org.apache.log4j.Logger; @@ -55,6 +58,7 @@ public class Upgrade228to229 implements DbUpgrade { @Override public void performDataMigration(Connection conn) { + dropKeysIfExist(conn); } @Override @@ -62,4 +66,31 @@ public class Upgrade228to229 implements DbUpgrade { return null; } + private void dropKeysIfExist(Connection conn) { + HashMap> indexes = new HashMap>(); + HashMap> foreignKeys = new HashMap>(); + + //indexes to drop + List keys = new ArrayList(); + keys.add("name"); + indexes.put("network_offerings", keys); + + //foreign keys to drop - this key would be re-added later + keys = new ArrayList(); + keys.add("fk_cluster__data_center_id"); + foreignKeys.put("cluster", keys); + + + // drop all foreign keys first + s_logger.debug("Dropping keys that don't exist in 2.2.6 version of the DB..."); + for (String tableName : foreignKeys.keySet()) { + DbUpgradeUtils.dropKeysIfExist(conn, tableName, foreignKeys.get(tableName), true); + } + + // drop indexes now + for (String tableName : indexes.keySet()) { + DbUpgradeUtils.dropKeysIfExist(conn, tableName, indexes.get(tableName), false); + } + } + } diff --git a/setup/db/db/schema-228to229.sql b/setup/db/db/schema-228to229.sql index 4ad8b1e35b0..3a4468c89a7 100644 --- a/setup/db/db/schema-228to229.sql +++ b/setup/db/db/schema-228to229.sql @@ -5,3 +5,5 @@ ALTER TABLE `cloud`.`account` ADD COLUMN `network_domain` varchar(255); ALTER TABLE `cloud`.`domain` ADD COLUMN `network_domain` varchar(255); +ALTER TABLE `cloud`.`cluster` ADD CONSTRAINT `fk_cluster__data_center_id` FOREIGN KEY (`data_center_id`) REFERENCES `cloud`.`data_center`(`id`) ON DELETE CASCADE; +