You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2013/07/04 00:26:12 UTC

[33/50] [abbrv] git commit: updated refs/heads/vmsync to 78fa5e1

CLOUDSTACK-3324: Fix/Improve upgrade system vm template 41 to 42

Signed-off-by: Abhinandan Prateek <ap...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e63ac551
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e63ac551
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e63ac551

Branch: refs/heads/vmsync
Commit: e63ac5512e85217274a63996ee1e14f887c45dae
Parents: 9d07f89
Author: Harikrishna Patnala <ha...@citrix.com>
Authored: Tue Jul 2 21:38:14 2013 +0530
Committer: Abhinandan Prateek <ap...@apache.org>
Committed: Wed Jul 3 17:18:25 2013 +0530

----------------------------------------------------------------------
 .../com/cloud/upgrade/dao/Upgrade410to420.java  | 247 +++++--------------
 1 file changed, 65 insertions(+), 182 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e63ac551/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
index da68348..3073324 100644
--- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
+++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
@@ -20,6 +20,7 @@ package com.cloud.upgrade.dao;
 import com.cloud.deploy.DeploymentPlanner;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.script.Script;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
 
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
@@ -37,6 +38,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.Set;
+import java.util.HashSet;
 import com.cloud.network.vpc.NetworkACL;
 
 public class Upgrade410to420 implements DbUpgrade {
@@ -132,208 +135,89 @@ public class Upgrade410to420 implements DbUpgrade {
 	    // TODO: system vm template migration after storage refactoring
         PreparedStatement pstmt = null;
         ResultSet rs = null;
-        boolean xenserver = false;
-        boolean kvm = false;
-        boolean VMware = false;
-        boolean Hyperv = false;
-        boolean LXC = false;
         s_logger.debug("Updating System Vm template IDs");
         try{
             //Get all hypervisors in use
-        try {
+            Set<HypervisorType> hypervisorsListInUse = new HashSet<HypervisorType>();
+            try {
                 pstmt = conn.prepareStatement("select distinct(hypervisor_type) from `cloud`.`cluster` where removed is null");
                 rs = pstmt.executeQuery();
                 while(rs.next()){
-                    if("XenServer".equals(rs.getString(1))){
-                        xenserver = true;
-                    } else if("KVM".equals(rs.getString(1))){
-                        kvm = true;
-                    } else if("VMware".equals(rs.getString(1))){
-                        VMware = true;
-                    } else if("Hyperv".equals(rs.getString(1))) {
-                        Hyperv = true;
-                    } else if("LXC".equals(rs.getString(1))) {
-                        LXC = true;
+                    switch (HypervisorType.getType(rs.getString(1))) {
+                        case XenServer: hypervisorsListInUse.add(HypervisorType.XenServer);
+                                        break;
+                        case KVM:       hypervisorsListInUse.add(HypervisorType.KVM);
+                                        break;
+                        case VMware:    hypervisorsListInUse.add(HypervisorType.VMware);
+                                        break;
+                        case Hyperv:    hypervisorsListInUse.add(HypervisorType.Hyperv);
+                                        break;
+                        case LXC:       hypervisorsListInUse.add(HypervisorType.LXC);
+                                        break;
                     }
                 }
             } catch (SQLException e) {
                 throw new CloudRuntimeException("Error while listing hypervisors in use", e);
             }
 
-            s_logger.debug("Updating XenSever System Vms");
-            //XenServer
-            try {
-                //Get 4.2.0 XenServer system Vm template Id
-                pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name like 'systemvm-xenserver-4.2' and removed is null order by id desc limit 1");
-                rs = pstmt.executeQuery();
-                if(rs.next()){
-                    long templateId = rs.getLong(1);
-                    rs.close();
-                    pstmt.close();
-                    // change template type to SYSTEM
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // update templete ID of system Vms
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'XenServer'");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // Change value of global configuration parameter router.template.xen
-                    pstmt = conn.prepareStatement("INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.xen', 'systemvm-xenserver-4.2', 'Name of the default router template on Xenserver')");
-                    pstmt.execute();
-                    pstmt.close();
-                } else {
-                    if (xenserver){
-                        throw new CloudRuntimeException("4.2.0 XenServer SystemVm template not found. Cannot upgrade system Vms");
-                    } else {
-                        s_logger.warn("4.2.0 XenServer SystemVm template not found. XenServer hypervisor is not used, so not failing upgrade");
-                    }
-                }
-            } catch (SQLException e) {
-                throw new CloudRuntimeException("Error while updating XenServer systemVm template", e);
-            }
-
-            //KVM
-            s_logger.debug("Updating KVM System Vms");
-            try {
-                //Get 4.2.0 KVM system Vm template Id
-                pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name = 'systemvm-kvm-4.2' and removed is null order by id desc limit 1");
-                rs = pstmt.executeQuery();
-                if(rs.next()){
-                    long templateId = rs.getLong(1);
-                    rs.close();
-                    pstmt.close();
-                    // change template type to SYSTEM
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // update templete ID of system Vms
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'KVM'");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // Change value of global configuration parameter router.template.kvm
-                    pstmt = conn.prepareStatement("INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.kvm', 'systemvm-kvm-4.2', 'Name of the default router template on KVM')");
-                    pstmt.execute();
-                    pstmt.close();
-                } else {
-                    if (kvm){
-                        throw new CloudRuntimeException("4.2.0 KVM SystemVm template not found. Cannot upgrade system Vms");
-                    } else {
-                        s_logger.warn("4.2.0 KVM SystemVm template not found. KVM hypervisor is not used, so not failing upgrade");
-                    }
+            Map<HypervisorType, String> NewTemplateNameList = new HashMap<HypervisorType, String>(){
+                {   put(HypervisorType.XenServer, "systemvm-xenserver-4.2");
+                    put(HypervisorType.VMware, "systemvm-vmware-4.2");
+                    put(HypervisorType.KVM, "systemvm-kvm-4.2");
+                    put(HypervisorType.LXC, "systemvm-lxc-4.2");
+                    put(HypervisorType.Hyperv, "systemvm-hyperv-4.2");
                 }
-            } catch (SQLException e) {
-                throw new CloudRuntimeException("Error while updating KVM systemVm template", e);
-            }
+            };
 
-            //VMware
-            s_logger.debug("Updating VMware System Vms");
-            try {
-                //Get 4.2.0 VMware system Vm template Id
-                pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name = 'systemvm-vmware-4.2' and removed is null order by id desc limit 1");
-                rs = pstmt.executeQuery();
-                if(rs.next()){
-                    long templateId = rs.getLong(1);
-                    rs.close();
-                    pstmt.close();
-                    // change template type to SYSTEM
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // update templete ID of system Vms
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'VMware'");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // Change value of global configuration parameter router.template.vmware
-                    pstmt = conn.prepareStatement("INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.vmware', 'systemvm-vmware-4.2', 'Name of the default router template on Vmware')");
-                    pstmt.execute();
-                    pstmt.close();
-                } else {
-                    if (VMware){
-                        throw new CloudRuntimeException("4.2.0 VMware SystemVm template not found. Cannot upgrade system Vms");
-                    } else {
-                        s_logger.warn("4.2.0 VMware SystemVm template not found. VMware hypervisor is not used, so not failing upgrade");
-                    }
+            Map<HypervisorType, String> routerTemplateConfigurationNames = new HashMap<HypervisorType, String>(){
+                {   put(HypervisorType.XenServer, "router.template.xen");
+                    put(HypervisorType.VMware, "router.template.vmware");
+                    put(HypervisorType.KVM, "router.template.kvm");
+                    put(HypervisorType.LXC, "router.template.lxc");
+                    put(HypervisorType.Hyperv, "router.template.hyperv");
                 }
-            } catch (SQLException e) {
-                throw new CloudRuntimeException("Error while updating VMware systemVm template", e);
-            }
+            };
 
-            //Hyperv
-            s_logger.debug("Updating Hyperv System Vms");
-            try {
-                //Get 4.2.0 Hyperv system Vm template Id
-                pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name = 'systemvm-hyperv-4.2' and removed is null order by id desc limit 1");
-                rs = pstmt.executeQuery();
-                if(rs.next()){
-                    long templateId = rs.getLong(1);
-                    rs.close();
-                    pstmt.close();
-                    // change template type to SYSTEM
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // update templete ID of system Vms
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'Hyperv'");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // Change value of global configuration parameter router.template.hyperv
-                    pstmt = conn.prepareStatement("INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.hyperv', 'systemvm-hyperv-4.2', 'Name of the default router template on Hyperv')");
-                    pstmt.execute();
-                    pstmt.close();
-                } else {
-                    if (Hyperv){
-                        throw new CloudRuntimeException("4.2.0 HyperV SystemVm template not found. Cannot upgrade system Vms");
+            for (Map.Entry<HypervisorType, String> hypervisorAndTemplateName : NewTemplateNameList.entrySet()){
+                s_logger.debug("Updating " + hypervisorAndTemplateName.getKey() + " System Vms");
+                try {
+                    //Get 4.2.0 system Vm template Id for corresponding hypervisor
+                    pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name like ? and removed is null order by id desc limit 1");
+                    pstmt.setString(1, hypervisorAndTemplateName.getValue());
+                    rs = pstmt.executeQuery();
+                    if(rs.next()){
+                        long templateId = rs.getLong(1);
+                        rs.close();
+                        pstmt.close();
+                        // change template type to SYSTEM
+                        pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
+                        pstmt.setLong(1, templateId);
+                        pstmt.executeUpdate();
+                        pstmt.close();
+                        // update templete ID of system Vms
+                        pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = ?");
+                        pstmt.setLong(1, templateId);
+                        pstmt.setString(2, hypervisorAndTemplateName.getKey().toString());
+                        pstmt.executeUpdate();
+                        pstmt.close();
+                        // Change value of global configuration parameter router.template.* for the corresponding hypervisor
+                        pstmt = conn.prepareStatement("INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', ?, ?, 'Name of the default router template on Xenserver')");
+                        pstmt.setString(1, routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()));
+                        pstmt.setString(2, hypervisorAndTemplateName.getValue());
+                        pstmt.execute();
+                        pstmt.close();
                     } else {
-                        s_logger.warn("4.2.0 Hyperv SystemVm template not found. Hyperv hypervisor is not used, so not failing upgrade");
+                        if (hypervisorsListInUse.contains(hypervisorAndTemplateName.getKey())){
+                            throw new CloudRuntimeException("4.2.0 " + hypervisorAndTemplateName.getKey() + " SystemVm template not found. Cannot upgrade system Vms");
+                        } else {
+                            s_logger.warn("4.2.0 " + hypervisorAndTemplateName.getKey() + " SystemVm template not found. " + hypervisorAndTemplateName.getKey() + " hypervisor is not used, so not failing upgrade");
+                        }
                     }
+                } catch (SQLException e) {
+                    throw new CloudRuntimeException("Error while updating "+ hypervisorAndTemplateName.getKey() +" systemVm template", e);
                 }
-            } catch (SQLException e) {
-                throw new CloudRuntimeException("Error while updating Hyperv systemVm template", e);
             }
 
-            //LXC
-            s_logger.debug("Updating LXC System Vms");
-            try {
-                //Get 4.2.0 LXC system Vm template Id
-                pstmt = conn.prepareStatement("select id from `cloud`.`vm_template` where name = 'systemvm-lxc-4.2' and removed is null order by id desc limit 1");
-                rs = pstmt.executeQuery();
-                if(rs.next()){
-                    long templateId = rs.getLong(1);
-                    rs.close();
-                    pstmt.close();
-                    // change template type to SYSTEM
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id = ?");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // update templete ID of system Vms
-                    pstmt = conn.prepareStatement("update `cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and hypervisor_type = 'LXC'");
-                    pstmt.setLong(1, templateId);
-                    pstmt.executeUpdate();
-                    pstmt.close();
-                    // Change value of global configuration parameter router.template.lxc
-                    pstmt = conn.prepareStatement("INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.lxc', 'systemvm-lxc-4.2', 'Name of the default router template on LXC')");
-                    pstmt.execute();
-                    pstmt.close();
-                } else {
-                    if (LXC){
-                        throw new CloudRuntimeException("4.2.0 LXC SystemVm template not found. Cannot upgrade system Vms");
-                    } else {
-                        s_logger.warn("4.2.0 LXC SystemVm template not found. LXC hypervisor is not used, so not failing upgrade");
-                    }
-                }
-            } catch (SQLException e) {
-                throw new CloudRuntimeException("Error while updating LXC systemVm template", e);
-            }
             s_logger.debug("Updating System Vm Template IDs Complete");
         }
         finally {
@@ -364,7 +248,6 @@ public class Upgrade410to420 implements DbUpgrade {
             }
         }
         */
-
 	}
 
 	private void updatePrimaryStore(Connection conn) {