diff --git a/server/src/com/cloud/upgrade/dao/DbUpgrade.java b/server/src/com/cloud/upgrade/dao/DbUpgrade.java index 0509a207617..f73e6c04741 100644 --- a/server/src/com/cloud/upgrade/dao/DbUpgrade.java +++ b/server/src/com/cloud/upgrade/dao/DbUpgrade.java @@ -17,6 +17,8 @@ */ package com.cloud.upgrade.dao; +import java.io.File; + public interface DbUpgrade { String[] getUpgradableVersionRange(); @@ -24,7 +26,20 @@ public interface DbUpgrade { boolean supportsRollingUpgrade(); - void prepare(); - void upgrade(); - void cleanup(); + /** + * @return the script to prepare the database schema for the + * data migration step. + */ + File getPrepareScript(); + + /** + * Performs the actual data migration. + */ + void performDataMigration(); + + /** + * + * @return + */ + File getCleanupScript(); } diff --git a/server/src/com/cloud/upgrade/dao/Upgrade217to22.java b/server/src/com/cloud/upgrade/dao/Upgrade217to22.java index 96c2bb72426..75d722a51b5 100644 --- a/server/src/com/cloud/upgrade/dao/Upgrade217to22.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade217to22.java @@ -18,46 +18,38 @@ package com.cloud.upgrade.dao; import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.sql.Connection; -import java.sql.SQLException; import com.cloud.utils.PropertiesUtil; -import com.cloud.utils.db.ScriptRunner; -import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; public class Upgrade217to22 implements DbUpgrade { @Override - public void prepare() { + public File getPrepareScript() { File file = PropertiesUtil.findConfigFile("schema-21to22.sql"); if (file == null) { throw new CloudRuntimeException("Unable to find the upgrade script, schema-21to22.sql"); } - try { - FileReader reader = new FileReader(file); - Connection conn = Transaction.getStandaloneConnection(); - ScriptRunner runner = new ScriptRunner(conn, false, false); - runner.runScript(reader); - } catch (FileNotFoundException e) { - throw new CloudRuntimeException("Unable to find upgrade script, schema-21to22.sql", e); - } catch (IOException e) { - throw new CloudRuntimeException("Unable to read upgrade script, schema-21to22.sql", e); - } catch (SQLException e) { - throw new CloudRuntimeException("Unable to execute upgrade script, schema-21to22.sql", e); - } + return file; + } + + protected void upgradeNetworks() { + } @Override - public void upgrade() { + public void performDataMigration() { } @Override - public void cleanup() { + public File getCleanupScript() { + File file = PropertiesUtil.findConfigFile("schema-21to22-cleanup.sql"); + if (file == null) { + throw new CloudRuntimeException("Unable to find the upgrade script, schema-21to22-cleanup.sql"); + } + + return file; } @Override diff --git a/server/src/com/cloud/upgrade/dao/VersionDaoImpl.java b/server/src/com/cloud/upgrade/dao/VersionDaoImpl.java index 1ddfb880895..20d744fee9b 100644 --- a/server/src/com/cloud/upgrade/dao/VersionDaoImpl.java +++ b/server/src/com/cloud/upgrade/dao/VersionDaoImpl.java @@ -17,6 +17,10 @@ */ package com.cloud.upgrade.dao; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -38,6 +42,7 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; +import com.cloud.utils.db.ScriptRunner; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Func; @@ -124,6 +129,21 @@ public class VersionDaoImpl extends GenericDaoBase implements V return vers.get(0); } + protected void runScript(File file) { + try { + FileReader reader = new FileReader(file); + Connection conn = Transaction.getStandaloneConnection(); + ScriptRunner runner = new ScriptRunner(conn, false, true); + runner.runScript(reader); + } catch (FileNotFoundException e) { + throw new CloudRuntimeException("Unable to find upgrade script, schema-21to22.sql", e); + } catch (IOException e) { + throw new CloudRuntimeException("Unable to read upgrade script, schema-21to22.sql", e); + } catch (SQLException e) { + throw new CloudRuntimeException("Unable to execute upgrade script, schema-21to22.sql", e); + } + } + @DB protected void upgrade(String dbVersion, String currentVersion) throws ConfigurationException { s_logger.info("Database upgrade must be performed from " + dbVersion + " to " + currentVersion); @@ -149,8 +169,9 @@ public class VersionDaoImpl extends GenericDaoBase implements V s_logger.info("Running upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade.getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion()); Transaction txn = Transaction.currentTxn(); txn.start(); - upgrade.prepare(); - upgrade.upgrade(); + File script = upgrade.getPrepareScript(); + runScript(script); + upgrade.performDataMigration(); VersionVO version = new VersionVO(upgrade.getUpgradedVersion()); persist(version); txn.commit(); @@ -161,7 +182,8 @@ public class VersionDaoImpl extends GenericDaoBase implements V VersionVO version = findByVersion(upgrade.getUpgradedVersion(), Step.Upgrade); Transaction txn = Transaction.currentTxn(); txn.start(); - upgrade.cleanup(); + File script = upgrade.getCleanupScript(); + runScript(script); version.setStep(Step.Complete); version.setUpdated(new Date()); update(version.getId(), version); diff --git a/setup/db/schema-21to22-cleanup.sql b/setup/db/schema-21to22-cleanup.sql index 5a0acfe940c..10ab85ed5dc 100644 --- a/setup/db/schema-21to22-cleanup.sql +++ b/setup/db/schema-21to22-cleanup.sql @@ -5,24 +5,34 @@ DROP TABLE IF EXISTS `cloud`.`disk_template_ref`; -- Then remove columns -ALTER TABLE `cloud`.`volume` DROP COLUMN `mirror_state`; -ALTER TABLE `cloud`.`volume` DROP COLUMN `mirror_vol`; -ALTER TABLE `cloud`.`volume` DROP COLUMN `destroyed`; +ALTER TABLE `cloud`.`volumes` DROP COLUMN `mirror_state`; +ALTER TABLE `cloud`.`volumes` DROP COLUMN `mirror_vol`; +ALTER TABLE `cloud`.`volumes` DROP COLUMN `destroyed`; DROP TABLE `cloud`.`ip_forwarding`; ALTER TABLE `cloud`.`host` DROP COLUMN `sequence`; -DROP TABLE `cloud`,`op_vm_host`; +DROP TABLE `cloud`.`op_vm_host`; -ALTER TABLE `cloud`.vm_instance` DROP COLUMN `iso_id`; -ALTER TABLE `cloud`.vm_instance` DROP COLUMN `display_name`; -ALTER TABLE `cloud`.vm_instance` DROP COLUMN `group`; -ALTER TABLE `cloud`.vm_instance` DROP COLUMN `storage_ip`; -ALTER TABLE `cloud`.vm_instance` DROP COLUMN `mirrored_vols`; +ALTER TABLE `cloud`.`vm_instance` DROP COLUMN `iso_id`; +ALTER TABLE `cloud`.`vm_instance` DROP COLUMN `display_name`; +#ALTER TABLE `cloud`.`vm_instance` DROP COLUMN `group`; +ALTER TABLE `cloud`.`vm_instance` DROP COLUMN `storage_ip`; +ALTER TABLE `cloud`.`vm_instance` DROP COLUMN `mirrored_vols`; DROP TABLE `cloud`.`pricing`; +ALTER TABLE `cloud`.`user_vm` DROP FOREIGN KEY `fk_user_vm__domain_router_id`; +ALTER TABLE `cloud`.`user_vm` DROP INDEX `i_user_vm__domain_router_id`; +ALTER TABLE `cloud`.`user_vm` DROP FOREIGN KEY `fk_user_vm__service_offering_id`; +ALTER TABLE `cloud`.`user_vm` DROP INDEX `i_user_vm__service_offering_id`; +ALTER TABLE `cloud`.`user_vm` DROP FOREIGN KEY `fk_user_vm__account_id`; +ALTER TABLE `cloud`.`user_vm` DROP INDEX `i_user_vm__account_id`; +ALTER TABLE `cloud`.`user_vm` DROP FOREIGN KEY `fk_user_vm__external_ip_address`; +ALTER TABLE `cloud`.`user_vm` DROP INDEX `i_user_vm__external_ip_address`; +ALTER TABLE `cloud`.`user_vm` DROP FOREIGN KEY `fk_user_vm__external_vlan_db_id`; +ALTER TABLE `cloud`.`user_vm` DROP INDEX `i_user_vm__external_vlan_db_id`; ALTER TABLE `cloud`.`user_vm` DROP COLUMN `domain_router_id`; ALTER TABLE `cloud`.`user_vm` DROP COLUMN `service_offering_id`; ALTER TABLE `cloud`.`user_vm` DROP COLUMN `vnet`; @@ -33,6 +43,12 @@ ALTER TABLE `cloud`.`user_vm` DROP COLUMN `external_ip_address`; ALTER TABLE `cloud`.`user_vm` DROP COLUMN `external_mac_address`; ALTER TABLE `cloud`.`user_vm` DROP COLUMN `external_vlan_db_id`; +ALTER TABLE `cloud`.`domain_router` DROP FOREIGN KEY `fk_domain_router__account_id`; +ALTER TABLE `cloud`.`domain_router` DROP FOREIGN KEY `fk_domain_router__public_ip_address`; +ALTER TABLE `cloud`.`domain_router` DROP FOREIGN KEY `fk_domain_router__vlan_id`; +ALTER TABLE `cloud`.`domain_router` DROP INDEX `i_domain_router__account_id`; +ALTER TABLE `cloud`.`domain_router` DROP INDEX `i_domain_router__public_ip_address`; +ALTER TABLE `cloud`.`domain_router` DROP INDEX `i_domain_router__vlan_id`; ALTER TABLE `cloud`.`domain_router` DROP COLUMN `gateway`; ALTER TABLE `cloud`.`domain_router` DROP COLUMN `ram_size`; ALTER TABLE `cloud`.`domain_router` DROP COLUMN `dns1`; @@ -47,6 +63,8 @@ ALTER TABLE `cloud`.`domain_router` DROP COLUMN `domain_id`; ALTER TABLE `cloud`.`domain_router` DROP COLUMN `account_id`; ALTER TABLE `cloud`.`domain_router` DROP COLUMN `dhcp_ip_address`; +ALTER TABLE `cloud`.`console_proxy` DROP FOREIGN KEY `fk_console_proxy__vlan_id`; +ALTER TABLE `cloud`.`console_proxy` DROP INDEX `i_console_proxy__vlan_id`; ALTER TABLE `cloud`.`console_proxy` DROP COLUMN `gateway`; ALTER TABLE `cloud`.`console_proxy` DROP COLUMN `dns1`; ALTER TABLE `cloud`.`console_proxy` DROP COLUMN `dns2`; @@ -70,15 +88,12 @@ ALTER TABLE `cloud`.`secondary_storage_vm` DROP COLUMN `vlan_id`; ALTER TABLE `cloud`.`secondary_storage_vm` DROP COLUMN `ram_size`; ALTER TABLE `cloud`.`secondary_storage_vm` DROP COLUMN `guid`; + DROP TABLE `cloud`.`vm_disk`; ALTER TABLE `cloud`.`disk_offering` DROP COLUMN `mirrored`; ALTER TABLE `cloud`.`service_offering` DROP COLUMN `guest_ip_type`; -DROP TABLE `cloud`.`security_group_vm_map`; -DROP TABLE `cloud`.`load_balancer_vm_map`; -DROP TABLE `cloud`.`security_group`; - ALTER TABLE `cloud`.`load_balancer_vm_map` DROP COLUMN `pending`;