mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
bug 10166: drop account_id/domain_id fields (if exist) in domain_router table
status 10166: resolved fixed
This commit is contained in:
parent
9a2cc8008b
commit
64252b48f2
59
server/src/com/cloud/upgrade/dao/DbUpgradeUtils.java
Normal file
59
server/src/com/cloud/upgrade/dao/DbUpgradeUtils.java
Normal file
@ -0,0 +1,59 @@
|
||||
package com.cloud.upgrade.dao;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
public class DbUpgradeUtils {
|
||||
final static Logger s_logger = Logger.getLogger(DbUpgradeUtils.class);
|
||||
|
||||
public static void dropKeysIfExist(Connection conn, String tableName, List<String> keys, boolean isForeignKey) {
|
||||
for (String key : keys) {
|
||||
try {
|
||||
PreparedStatement pstmt = null;
|
||||
if (isForeignKey) {
|
||||
pstmt = conn.prepareStatement("ALTER TABLE " + tableName + " DROP FOREIGN KEY " + key);
|
||||
} else {
|
||||
pstmt = conn.prepareStatement("ALTER TABLE " + tableName + " DROP KEY " + key);
|
||||
}
|
||||
pstmt.executeUpdate();
|
||||
s_logger.debug("Key " + key + " is dropped successfully from the table " + tableName);
|
||||
pstmt.close();
|
||||
} catch (SQLException e) {
|
||||
// do nothing here
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void dropTableColumnsIfExist(Connection conn, String tableName, List<String> columns) {
|
||||
PreparedStatement pstmt = null;
|
||||
try {
|
||||
for (String column : columns) {
|
||||
try {
|
||||
pstmt = conn.prepareStatement("SELECT " + column + " FROM " + tableName);
|
||||
pstmt.executeQuery();
|
||||
|
||||
} catch (SQLException e) {
|
||||
// if there is an exception, it means that field doesn't exist, so do nothing here
|
||||
s_logger.trace("Field " + column + " doesn't exist in " + tableName);
|
||||
continue;
|
||||
}
|
||||
|
||||
pstmt = conn.prepareStatement("ALTER TABLE " + tableName + " DROP COLUMN " + column);
|
||||
pstmt.executeUpdate();
|
||||
s_logger.debug("Column " + column + " is dropped successfully from the table " + tableName);
|
||||
pstmt.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
s_logger.warn("Unable to drop columns using query " + pstmt + " due to exception", e);
|
||||
throw new CloudRuntimeException("Unable to drop columns due to ", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -209,32 +209,7 @@ public class Upgrade224to225 implements DbUpgrade {
|
||||
|
||||
s_logger.debug("Dropping columns that don't exist in 2.2.5 version of the DB...");
|
||||
for (String tableName : tablesToModify.keySet()) {
|
||||
dropTableColumnsIfExist(conn, tableName, tablesToModify.get(tableName));
|
||||
}
|
||||
}
|
||||
|
||||
private void dropTableColumnsIfExist(Connection conn, String tableName, List<String> columns) {
|
||||
PreparedStatement pstmt = null;
|
||||
try {
|
||||
for (String column : columns) {
|
||||
try {
|
||||
pstmt = conn.prepareStatement("SELECT " + column + " FROM " + tableName);
|
||||
pstmt.executeQuery();
|
||||
|
||||
} catch (SQLException e) {
|
||||
// if there is an exception, it means that field doesn't exist, so do nothing here
|
||||
s_logger.trace("Field " + column + " doesn't exist in " + tableName);
|
||||
continue;
|
||||
}
|
||||
|
||||
pstmt = conn.prepareStatement("ALTER TABLE " + tableName + " DROP COLUMN " + column);
|
||||
pstmt.executeUpdate();
|
||||
s_logger.debug("Column " + column + " is dropped successfully from the table " + tableName);
|
||||
pstmt.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
s_logger.warn("Unable to drop columns using query " + pstmt + " due to exception", e);
|
||||
throw new CloudRuntimeException("Unable to drop columns due to ", e);
|
||||
DbUpgradeUtils.dropTableColumnsIfExist(conn, tableName, tablesToModify.get(tableName));
|
||||
}
|
||||
}
|
||||
|
||||
@ -303,31 +278,12 @@ public class Upgrade224to225 implements DbUpgrade {
|
||||
// drop all foreign keys first
|
||||
s_logger.debug("Dropping keys that don't exist in 2.2.5 version of the DB...");
|
||||
for (String tableName : foreignKeys.keySet()) {
|
||||
dropKeysIfExist(conn, tableName, foreignKeys.get(tableName), true);
|
||||
DbUpgradeUtils.dropKeysIfExist(conn, tableName, foreignKeys.get(tableName), true);
|
||||
}
|
||||
|
||||
// drop indexes now
|
||||
for (String tableName : indexes.keySet()) {
|
||||
dropKeysIfExist(conn, tableName, indexes.get(tableName), false);
|
||||
}
|
||||
}
|
||||
|
||||
private void dropKeysIfExist(Connection conn, String tableName, List<String> keys, boolean isForeignKey) {
|
||||
for (String key : keys) {
|
||||
try {
|
||||
PreparedStatement pstmt = null;
|
||||
if (isForeignKey) {
|
||||
pstmt = conn.prepareStatement("ALTER TABLE " + tableName + " DROP FOREIGN KEY " + key);
|
||||
} else {
|
||||
pstmt = conn.prepareStatement("ALTER TABLE " + tableName + " DROP KEY " + key);
|
||||
}
|
||||
pstmt.executeUpdate();
|
||||
s_logger.debug("Key " + key + " is dropped successfully from the table " + tableName);
|
||||
pstmt.close();
|
||||
} catch (SQLException e) {
|
||||
// do nothing here
|
||||
continue;
|
||||
}
|
||||
DbUpgradeUtils.dropKeysIfExist(conn, tableName, indexes.get(tableName), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
109
server/src/com/cloud/upgrade/dao/Upgrade225to226.java
Normal file
109
server/src/com/cloud/upgrade/dao/Upgrade225to226.java
Normal file
@ -0,0 +1,109 @@
|
||||
/**
|
||||
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the GNU General Public License v3 or later.
|
||||
*
|
||||
* It is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or any later version.
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
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;
|
||||
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.script.Script;
|
||||
|
||||
public class Upgrade225to226 implements DbUpgrade {
|
||||
final static Logger s_logger = Logger.getLogger(Upgrade225to226.class);
|
||||
|
||||
@Override
|
||||
public File[] getPrepareScripts() {
|
||||
String file = Script.findScript("", "db/schema-225to226.sql");
|
||||
if (file == null) {
|
||||
throw new CloudRuntimeException("Unable to find the upgrade script, schema-225to226.sql");
|
||||
}
|
||||
|
||||
return new File[] { new File(file) };
|
||||
}
|
||||
|
||||
@Override
|
||||
public void performDataMigration(Connection conn) {
|
||||
dropKeysIfExist(conn);
|
||||
dropTableColumnsIfExist(conn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File[] getCleanupScripts() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getUpgradableVersionRange() {
|
||||
return new String[] { "2.2.5", "2.2.5" };
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUpgradedVersion() {
|
||||
return "2.2.6";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsRollingUpgrade() {
|
||||
return false;
|
||||
}
|
||||
|
||||
private void dropTableColumnsIfExist(Connection conn) {
|
||||
HashMap<String, List<String>> tablesToModify = new HashMap<String, List<String>>();
|
||||
|
||||
// domain router table
|
||||
List<String> columns = new ArrayList<String>();
|
||||
columns.add("account_id");
|
||||
columns.add("domain_id");
|
||||
tablesToModify.put("domain_router", columns);
|
||||
|
||||
s_logger.debug("Dropping columns that don't exist in 2.2.6 version of the DB...");
|
||||
for (String tableName : tablesToModify.keySet()) {
|
||||
DbUpgradeUtils.dropTableColumnsIfExist(conn, tableName, tablesToModify.get(tableName));
|
||||
}
|
||||
}
|
||||
|
||||
private void dropKeysIfExist(Connection conn) {
|
||||
HashMap<String, List<String>> foreignKeys = new HashMap<String, List<String>>();
|
||||
HashMap<String, List<String>> indexes = new HashMap<String, List<String>>();
|
||||
|
||||
// domain router table
|
||||
List<String> keys = new ArrayList<String>();
|
||||
keys.add("fk_domain_router__account_id");
|
||||
foreignKeys.put("domain_router", keys);
|
||||
|
||||
keys = new ArrayList<String>();
|
||||
keys.add("i_domain_router__account_id");
|
||||
indexes.put("domain_router", 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1198,7 +1198,7 @@ CREATE TABLE `cloud`.`storage_pool` (
|
||||
`cluster_id` bigint unsigned COMMENT 'foreign key to cluster',
|
||||
`available_bytes` bigint unsigned,
|
||||
`capacity_bytes` bigint unsigned,
|
||||
`host_address` char(40) NOT NULL COMMENT 'FQDN or IP of storage server',
|
||||
`host_address` varchar(255) NOT NULL COMMENT 'FQDN or IP of storage server',
|
||||
`path` varchar(255) NOT NULL COMMENT 'Filesystem path that is shared',
|
||||
`created` datetime COMMENT 'date the pool created',
|
||||
`removed` datetime COMMENT 'date removed if not null',
|
||||
|
||||
@ -26,9 +26,6 @@ ALTER TABLE `cloud`.`user_vm` DROP COLUMN `service_offering_id`;
|
||||
ALTER TABLE `cloud`.`user_vm` DROP COLUMN `account_id`;
|
||||
ALTER TABLE `cloud`.`user_vm` DROP COLUMN `domain_id`;
|
||||
|
||||
ALTER TABLE `cloud`.`domain_router` DROP FOREIGN KEY `fk_domain_router__account_id`;
|
||||
ALTER TABLE `cloud`.`domain_router` DROP INDEX `i_domain_router__account_id`;
|
||||
|
||||
#ALTER TABLE `cloud`.`secondary_storage_vm` DROP COLUMN `guid`;
|
||||
|
||||
#ALTER TABLE `cloud`.`vlan` ADD CONSTRAINT `fk_vlan__network_id` FOREIGN KEY `fk_vlan__network_id`(`network_id`) REFERENCES `networks`(`id`);
|
||||
|
||||
@ -953,7 +953,7 @@ INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type,
|
||||
INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type, extractable)
|
||||
VALUES (7, 'centos53-x64', 'CentOS 5.3(64-bit) no GUI (vSphere)', 1, now(), 'BUILTIN', 0, 64, 1, 'http://download.cloud.com/releases/2.2.0/CentOS5.3-x86_64.ova', 'f6f881b7f2292948d8494db837fe0f47', 0, 'CentOS 5.3(64-bit) no GUI (vSphere)', 'OVA', 12, 1, 1, 'VMware', 1);
|
||||
UPDATE vm_instance SET guest_os_id=15 where vm_template_id=1;
|
||||
UPDATE vm_instance SET vm_template_id=(SELECT id FROM vm_template WHERE unique_name='systemvm-xenserver-2.2.4' AND removed IS NULL) where vm_template_id=1;
|
||||
UPDATE vm_instance SET vm_template_id=(SELECT id FROM vm_template WHERE name='systemvm-xenserver-2.2.4' AND removed IS NULL) where vm_template_id=1;
|
||||
|
||||
|
||||
ALTER TABLE `cloud`.`instance_group` ADD CONSTRAINT `fk_instance_group__account_id` FOREIGN KEY `fk_instance_group__account_id` (`account_id`) REFERENCES `account` (`id`);
|
||||
|
||||
7
setup/db/db/schema-225to226.sql
Normal file
7
setup/db/db/schema-225to226.sql
Normal file
@ -0,0 +1,7 @@
|
||||
--;
|
||||
-- Schema upgrade from 2.2.5 to 2.2.6;
|
||||
--;
|
||||
|
||||
ALTER TABLE `cloud`.`storage_pool` MODIFY `host_address` varchar(255) NOT NULL;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user