mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	Added upgrade from 224 to 225
Conflicts: server/src/com/cloud/upgrade/DatabaseUpgradeChecker.java
This commit is contained in:
		
							parent
							
								
									0f566e4109
								
							
						
					
					
						commit
						b963429063
					
				@ -41,6 +41,7 @@ import com.cloud.upgrade.dao.Upgrade218to22;
 | 
			
		||||
import com.cloud.upgrade.dao.Upgrade218to224DomainVlans;
 | 
			
		||||
import com.cloud.upgrade.dao.Upgrade221to222;
 | 
			
		||||
import com.cloud.upgrade.dao.Upgrade222to224;
 | 
			
		||||
import com.cloud.upgrade.dao.Upgrade224to225;
 | 
			
		||||
import com.cloud.upgrade.dao.Upgrade225to226;
 | 
			
		||||
import com.cloud.upgrade.dao.UpgradeSnapshot217to224;
 | 
			
		||||
import com.cloud.upgrade.dao.UpgradeSnapshot223to224;
 | 
			
		||||
@ -71,6 +72,7 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
 | 
			
		||||
        _upgradeMap.put("2.2.2", new DbUpgrade[] { new Upgrade222to224(), new UpgradeSnapshot223to224() });
 | 
			
		||||
        _upgradeMap.put("2.2.3", new DbUpgrade[] { new Upgrade222to224(), new UpgradeSnapshot223to224() });
 | 
			
		||||
        _upgradeMap.put("2.2.5", new DbUpgrade[] { new Upgrade225to226()});
 | 
			
		||||
        _upgradeMap.put("2.2.4", new DbUpgrade[] { new Upgrade224to225() });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void runScript(File file) {
 | 
			
		||||
@ -109,6 +111,8 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
 | 
			
		||||
                    + currentVersion);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        boolean supportsRollingUpgrade = true;
 | 
			
		||||
        for (DbUpgrade upgrade : upgrades) {
 | 
			
		||||
            if (!upgrade.supportsRollingUpgrade()) {
 | 
			
		||||
@ -123,7 +127,7 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (DbUpgrade upgrade : upgrades) {
 | 
			
		||||
            s_logger.info("Running upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade.getUpgradableVersionRange()[1]
 | 
			
		||||
            s_logger.debug("Running upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade.getUpgradableVersionRange()[1]
 | 
			
		||||
                                                                                                                                                                                             + " to " + upgrade.getUpgradedVersion());
 | 
			
		||||
            Transaction txn = Transaction.open("Upgrade");
 | 
			
		||||
            txn.start();
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										114
									
								
								server/src/com/cloud/upgrade/dao/Upgrade224to225.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								server/src/com/cloud/upgrade/dao/Upgrade224to225.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,114 @@
 | 
			
		||||
/**
 | 
			
		||||
 *  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.sql.PreparedStatement;
 | 
			
		||||
import java.sql.ResultSet;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.apache.log4j.Logger;
 | 
			
		||||
 | 
			
		||||
import com.cloud.utils.exception.CloudRuntimeException;
 | 
			
		||||
import com.cloud.utils.script.Script;
 | 
			
		||||
 | 
			
		||||
public class Upgrade224to225 implements DbUpgrade {
 | 
			
		||||
    final static Logger s_logger = Logger.getLogger(Upgrade224to225.class);
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public File[] getPrepareScripts() {
 | 
			
		||||
        String file = Script.findScript("", "db/schema-224to225.sql");
 | 
			
		||||
        if (file == null) {
 | 
			
		||||
            throw new CloudRuntimeException("Unable to find the upgrade script, schema-224to225.sql");
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return new File[] {new File(file)};
 | 
			
		||||
    }
 | 
			
		||||
        
 | 
			
		||||
    @Override
 | 
			
		||||
    public void performDataMigration(Connection conn) {
 | 
			
		||||
        //create security groups for existing accounts if not present
 | 
			
		||||
        createSecurityGroups(conn);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public File[] getCleanupScripts() {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String[] getUpgradableVersionRange() {
 | 
			
		||||
        return new String[] { "2.2.4", "2.2.4"};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getUpgradedVersion() {
 | 
			
		||||
        return "2.2.5";
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean supportsRollingUpgrade() {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private void createSecurityGroups(Connection conn) {
 | 
			
		||||
        s_logger.debug("Creating missing default security group as a part of 224-225 upgrade");
 | 
			
		||||
        try {
 | 
			
		||||
            List<Long> accounts = new ArrayList<Long>();
 | 
			
		||||
            PreparedStatement pstmt = conn.prepareStatement("SELECT id FROM account WHERE removed IS NULL and id != 1");
 | 
			
		||||
            ResultSet rs = pstmt.executeQuery();
 | 
			
		||||
            while (rs.next()) {
 | 
			
		||||
                accounts.add(rs.getLong(1));
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            for (Long accountId : accounts) {
 | 
			
		||||
                //get default security group
 | 
			
		||||
                pstmt = conn.prepareStatement("SELECT * FROM security_group WHERE name='default' and account_id=?");
 | 
			
		||||
                pstmt.setLong(1, accountId);
 | 
			
		||||
                rs = pstmt.executeQuery();
 | 
			
		||||
                if (!rs.next()) {
 | 
			
		||||
                    s_logger.debug("Default security group is missing for account id=" + accountId + " so adding it");
 | 
			
		||||
                    
 | 
			
		||||
                    //get accountName/domainId information
 | 
			
		||||
                    
 | 
			
		||||
                    pstmt = conn.prepareStatement("SELECT account_name, domain_id FROM account WHERE id=?");
 | 
			
		||||
                    pstmt.setLong(1, accountId);
 | 
			
		||||
                    ResultSet rs1 = pstmt.executeQuery();
 | 
			
		||||
                    if (!rs1.next()) {
 | 
			
		||||
                        throw new CloudRuntimeException("Unable to create default security group for account id=" + accountId + ": unable to get accountName/domainId info");
 | 
			
		||||
                    }
 | 
			
		||||
                    String accountName = rs1.getString(1);
 | 
			
		||||
                    Long domainId = rs1.getLong(2);
 | 
			
		||||
                    
 | 
			
		||||
                    pstmt = conn.prepareStatement("INSERT INTO `cloud`.`security_group` (name, description, account_name, account_id, domain_id) VALUES ('default', 'Default Security Group', ?, ?, ?)");
 | 
			
		||||
                    pstmt.setString(1, accountName);
 | 
			
		||||
                    pstmt.setLong(2, accountId);
 | 
			
		||||
                    pstmt.setLong(3, domainId);
 | 
			
		||||
                    pstmt.executeUpdate();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
        } catch (SQLException e) {
 | 
			
		||||
            throw new CloudRuntimeException("Unable to create default security groups for existing accounts due to", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -34,7 +34,7 @@ import com.cloud.utils.db.DbTestUtils;
 | 
			
		||||
import com.cloud.utils.db.Transaction;
 | 
			
		||||
 | 
			
		||||
public class Sanity222To224UpgradeTest extends TestCase {
 | 
			
		||||
    private static final Logger s_logger = Logger.getLogger(PortForwarding218To224UpgradeTest.class);
 | 
			
		||||
    private static final Logger s_logger = Logger.getLogger(Sanity222To224UpgradeTest.class);
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @Before
 | 
			
		||||
@ -47,7 +47,7 @@ public class Sanity222To224UpgradeTest extends TestCase {
 | 
			
		||||
    public void tearDown() throws Exception {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void test217to22Upgrade() throws SQLException {
 | 
			
		||||
    public void test222to224Upgrade() throws SQLException {
 | 
			
		||||
        s_logger.debug("Finding sample data from 2.2.2");
 | 
			
		||||
        DbTestUtils.executeScript("PreviousDatabaseSchema/2.2.2/2.2.2_cloud_db_sample.sql", false, true);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										94
									
								
								server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								server/test/com/cloud/upgrade/Sanity224To225UpgradeTest.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,94 @@
 | 
			
		||||
/**
 | 
			
		||||
 *  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;
 | 
			
		||||
 | 
			
		||||
import java.sql.Connection;
 | 
			
		||||
import java.sql.PreparedStatement;
 | 
			
		||||
import java.sql.ResultSet;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
 | 
			
		||||
import junit.framework.TestCase;
 | 
			
		||||
 | 
			
		||||
import org.apache.log4j.Logger;
 | 
			
		||||
import org.junit.After;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
 | 
			
		||||
import com.cloud.upgrade.dao.VersionDaoImpl;
 | 
			
		||||
import com.cloud.utils.component.ComponentLocator;
 | 
			
		||||
import com.cloud.utils.db.DbTestUtils;
 | 
			
		||||
import com.cloud.utils.db.Transaction;
 | 
			
		||||
 | 
			
		||||
public class Sanity224To225UpgradeTest extends TestCase {
 | 
			
		||||
    private static final Logger s_logger = Logger.getLogger(Sanity224To225UpgradeTest.class);
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @Before
 | 
			
		||||
    public void setUp() throws Exception {
 | 
			
		||||
        DbTestUtils.executeScript("PreviousDatabaseSchema/clean-db.sql", false, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @After
 | 
			
		||||
    public void tearDown() throws Exception {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void test224to225Upgrade() throws SQLException {
 | 
			
		||||
        s_logger.debug("Finding sample data from 2.2.4");
 | 
			
		||||
        DbTestUtils.executeScript("PreviousDatabaseSchema/2.2.4/2.2.4_cloud_db_sample.sql", false, true);
 | 
			
		||||
 | 
			
		||||
        Connection conn;
 | 
			
		||||
        PreparedStatement pstmt;
 | 
			
		||||
        ResultSet rs;
 | 
			
		||||
 | 
			
		||||
        VersionDaoImpl dao = ComponentLocator.inject(VersionDaoImpl.class);
 | 
			
		||||
        DatabaseUpgradeChecker checker = ComponentLocator.inject(DatabaseUpgradeChecker.class);
 | 
			
		||||
 | 
			
		||||
        String version = dao.getCurrentVersion();
 | 
			
		||||
 | 
			
		||||
        if (!version.equals("2.2.4")) {
 | 
			
		||||
            s_logger.error("Version returned is not 2.2.4 but " + version);
 | 
			
		||||
        } else {
 | 
			
		||||
            s_logger.debug("Sanity 2.2.4 to 2.2.5 test version is " + version);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        checker.upgrade("2.2.4", "2.2.5");
 | 
			
		||||
 | 
			
		||||
        conn = Transaction.getStandaloneConnection();
 | 
			
		||||
        try {
 | 
			
		||||
            s_logger.debug("Starting tesing upgrade from 2.2.4 to 2.2.5...");
 | 
			
		||||
 | 
			
		||||
            // Version check
 | 
			
		||||
            pstmt = conn.prepareStatement("SELECT version FROM version");
 | 
			
		||||
            rs = pstmt.executeQuery();
 | 
			
		||||
 | 
			
		||||
            if (!rs.next()) {
 | 
			
		||||
                s_logger.error("ERROR: No version selected");
 | 
			
		||||
            } else if (!rs.getString(1).equals("2.2.5")) {
 | 
			
		||||
                s_logger.error("ERROR: VERSION stored is not 2.2.5: " + rs.getString(1));
 | 
			
		||||
            }
 | 
			
		||||
            rs.close();
 | 
			
		||||
            pstmt.close();
 | 
			
		||||
 | 
			
		||||
            s_logger.debug("Sanity 2.2.4 to 2.2.5 DB upgrade test passed");
 | 
			
		||||
 | 
			
		||||
        } finally {
 | 
			
		||||
            conn.close();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								setup/db/db/schema-224to225.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								setup/db/db/schema-224to225.sql
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
--;
 | 
			
		||||
-- Schema upgrade from 2.2.4 to 2.2.5;
 | 
			
		||||
--;
 | 
			
		||||
 | 
			
		||||
ALTER TABLE `cloud`.`security_group` add UNIQUE KEY (`name`, `account_id`);
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user