[ 
https://issues.apache.org/jira/browse/CLOUDSTACK-9046?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14996648#comment-14996648
 ] 

ASF GitHub Bot commented on CLOUDSTACK-9046:
--------------------------------------------

Github user DaanHoogland commented on a diff in the pull request:

    https://github.com/apache/cloudstack/pull/1050#discussion_r44282316
  
    --- Diff: engine/schema/src/com/cloud/upgrade/dao/Upgrade452to460.java ---
    @@ -165,4 +171,173 @@ private void addIndexForVMInstance(Connection conn) {
             return new File[] { new File(script) };
         }
     
    +    @SuppressWarnings("serial")
    +    private void updateSystemVmTemplates(final Connection conn) {
    +        s_logger.debug("Updating System Vm template IDs");
    +        // Get all hypervisors in use
    +        final Set<Hypervisor.HypervisorType> hypervisorsListInUse = new 
HashSet<Hypervisor.HypervisorType>();
    +        try (PreparedStatement pstmt = conn.prepareStatement("select 
distinct(hypervisor_type) from `cloud`.`cluster` where removed is null"); 
ResultSet rs = pstmt.executeQuery()) {
    +            while (rs.next()) {
    +                switch 
(Hypervisor.HypervisorType.getType(rs.getString(1))) {
    +                case XenServer:
    +                    
hypervisorsListInUse.add(Hypervisor.HypervisorType.XenServer);
    +                    break;
    +                case KVM:
    +                    
hypervisorsListInUse.add(Hypervisor.HypervisorType.KVM);
    +                    break;
    +                case VMware:
    +                    
hypervisorsListInUse.add(Hypervisor.HypervisorType.VMware);
    +                    break;
    +                case Hyperv:
    +                    
hypervisorsListInUse.add(Hypervisor.HypervisorType.Hyperv);
    +                    break;
    +                case LXC:
    +                    
hypervisorsListInUse.add(Hypervisor.HypervisorType.LXC);
    +                    break;
    +                case Ovm3:
    +                    
hypervisorsListInUse.add(Hypervisor.HypervisorType.Ovm3);
    +                    break;
    +                default: // no action on cases Any, BareMetal, None, Ovm,
    +                    // Parralels, Simulator and VirtualBox:
    +                    break;
    +                }
    +            }
    +        } catch (final SQLException e) {
    +            s_logger.error("updateSystemVmTemplates:Exception while 
getting hypervisor types from clusters: " + e.getMessage());
    +            throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while getting 
hypervisor types from clusters", e);
    +        }
    +
    +        final Map<Hypervisor.HypervisorType, String> NewTemplateNameList = 
new HashMap<Hypervisor.HypervisorType, String>() {
    +            {
    +                put(Hypervisor.HypervisorType.XenServer, 
"systemvm-xenserver-4.6");
    +                put(Hypervisor.HypervisorType.VMware, 
"systemvm-vmware-4.6");
    +                put(Hypervisor.HypervisorType.KVM, "systemvm-kvm-4.6");
    +                put(Hypervisor.HypervisorType.LXC, "systemvm-lxc-4.6");
    +                put(Hypervisor.HypervisorType.Hyperv, 
"systemvm-hyperv-4.6");
    +                put(Hypervisor.HypervisorType.Ovm3, "systemvm-ovm3-4.6");
    +            }
    +        };
    +
    +        final Map<Hypervisor.HypervisorType, String> 
routerTemplateConfigurationNames = new HashMap<Hypervisor.HypervisorType, 
String>() {
    +            {
    +                put(Hypervisor.HypervisorType.XenServer, 
"router.template.xenserver");
    +                put(Hypervisor.HypervisorType.VMware, 
"router.template.vmware");
    +                put(Hypervisor.HypervisorType.KVM, "router.template.kvm");
    +                put(Hypervisor.HypervisorType.LXC, "router.template.lxc");
    +                put(Hypervisor.HypervisorType.Hyperv, 
"router.template.hyperv");
    +                put(Hypervisor.HypervisorType.Ovm3, 
"router.template.ovm3");
    +            }
    +        };
    +
    +        final Map<Hypervisor.HypervisorType, String> newTemplateUrl = new 
HashMap<Hypervisor.HypervisorType, String>() {
    +            {
    +                put(Hypervisor.HypervisorType.XenServer, 
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-xen.vhd.bz2";);
    +                put(Hypervisor.HypervisorType.VMware, 
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-vmware.ova";);
    +                put(Hypervisor.HypervisorType.KVM, 
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-kvm.qcow2.bz2";);
    +                put(Hypervisor.HypervisorType.LXC, 
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-kvm.qcow2.bz2";);
    +                put(Hypervisor.HypervisorType.Hyperv, 
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-hyperv.vhd.zip";);
    +                put(Hypervisor.HypervisorType.Ovm3, 
"http://cloudstack.apt-get.eu/systemvm/4.6/systemvm64template-4.6.0-ovm.raw.bz2";);
    +            }
    +        };
    +
    +        final Map<Hypervisor.HypervisorType, String> newTemplateChecksum = 
new HashMap<Hypervisor.HypervisorType, String>() {
    +            {
    +                put(Hypervisor.HypervisorType.XenServer, 
"8886f554a499ec5405b6f203d9d36460");
    +                put(Hypervisor.HypervisorType.VMware, 
"4b415224fe00b258f66cad9fce9f73fc");
    +                put(Hypervisor.HypervisorType.KVM, 
"c059b0d051e0cd6fbe9d5d4fc40c7e5d");
    +                put(Hypervisor.HypervisorType.LXC, 
"c059b0d051e0cd6fbe9d5d4fc40c7e5d");
    +                put(Hypervisor.HypervisorType.Hyperv, 
"53e24bddfa56ea3139ed37af4b519013");
    +                put(Hypervisor.HypervisorType.Ovm3, 
"c8577d27b2daafb2d9a4ed307ce2f00f");
    +            }
    +        };
    +
    +        for (final Map.Entry<Hypervisor.HypervisorType, String> 
hypervisorAndTemplateName : NewTemplateNameList.entrySet()) {
    +            s_logger.debug("Updating " + 
hypervisorAndTemplateName.getKey() + " System Vms");
    +            try (PreparedStatement pstmt = conn.prepareStatement("select 
id from `cloud`.`vm_template` where name = ? and removed is null order by id 
desc limit 1")) {
    +                // Get 4.6.0 system Vm template Id for corresponding 
hypervisor
    +                long templateId = -1;
    +                pstmt.setString(1, hypervisorAndTemplateName.getValue());
    +                try (ResultSet rs = pstmt.executeQuery()) {
    +                    if (rs.next()) {
    +                        templateId = rs.getLong(1);
    +                    }
    +                } catch (final SQLException e) {
    +                    s_logger.error("updateSystemVmTemplates:Exception 
while getting ids of templates: " + e.getMessage());
    +                    throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while getting ids of 
templates", e);
    +                }
    +
    +                // change template type to SYSTEM
    +                if (templateId != -1) {
    +                    try (PreparedStatement templ_type_pstmt = 
conn.prepareStatement("update `cloud`.`vm_template` set type='SYSTEM' where id 
= ?");) {
    +                        templ_type_pstmt.setLong(1, templateId);
    +                        templ_type_pstmt.executeUpdate();
    +                    } catch (final SQLException e) {
    +                        s_logger.error("updateSystemVmTemplates:Exception 
while updating template with id " + templateId + " to be marked as 'system': " 
+ e.getMessage());
    +                        throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while updating 
template with id " + templateId + " to be marked as 'system'", e);
    +                    }
    +                    // update template ID of system Vms
    +                    try (PreparedStatement update_templ_id_pstmt = conn
    +                            .prepareStatement("update 
`cloud`.`vm_instance` set vm_template_id = ? where type <> 'User' and 
hypervisor_type = ?");) {
    +                        update_templ_id_pstmt.setLong(1, templateId);
    +                        update_templ_id_pstmt.setString(2, 
hypervisorAndTemplateName.getKey().toString());
    +                        update_templ_id_pstmt.executeUpdate();
    +                    } catch (final Exception e) {
    +                        s_logger.error("updateSystemVmTemplates:Exception 
while setting template for " + hypervisorAndTemplateName.getKey().toString() + 
" to " + templateId
    +                                + ": " + e.getMessage());
    +                        throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while setting template 
for " + hypervisorAndTemplateName.getKey().toString() + " to "
    +                                + templateId, e);
    +                    }
    +
    +                    // Change value of global configuration parameter
    +                    // router.template.* for the corresponding hypervisor
    +                    try (PreparedStatement update_pstmt = 
conn.prepareStatement("UPDATE `cloud`.`configuration` SET value = ? WHERE name 
= ?");) {
    +                        update_pstmt.setString(1, 
hypervisorAndTemplateName.getValue());
    +                        update_pstmt.setString(2, 
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()));
    +                        update_pstmt.executeUpdate();
    +                    } catch (final SQLException e) {
    +                        s_logger.error("updateSystemVmTemplates:Exception 
while setting " + 
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()) + " to 
"
    +                                + hypervisorAndTemplateName.getValue() + 
": " + e.getMessage());
    +                        throw new 
CloudRuntimeException("updateSystemVmTemplates:Exception while setting "
    +                                + 
routerTemplateConfigurationNames.get(hypervisorAndTemplateName.getKey()) + " to 
" + hypervisorAndTemplateName.getValue(), e);
    +                    }
    +
    +                    // Change value of global configuration parameter
    +                    // minreq.sysvmtemplate.version for the ACS version
    +                    try (PreparedStatement update_pstmt = 
conn.prepareStatement("UPDATE `cloud`.`configuration` SET value = ? WHERE name 
= ?");) {
    --- End diff --
    
    I know this is c&p and not important but .... a prepared statement should 
go as prepared...


> Fix upgrade path from 4.4 and 4.5 to 4.6
> ----------------------------------------
>
>                 Key: CLOUDSTACK-9046
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9046
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the 
> default.) 
>          Components: Upgrade
>    Affects Versions: 4.6.0
>            Reporter: Wilder Rodrigues
>            Assignee: Wilder Rodrigues
>            Priority: Blocker
>             Fix For: 4.6.0
>
>
> When upgrading to 4.6 from 4.5 or earlier, the systemvm template that is 
> registered upfront is not marked as SYSTEM and set as the template for the 
> existing systemvms. Therefore, new systemvms work fine but existing ones 
> don't.
> RCA is missing code in the upgrade path, as is present when upgrading from 
> 4.4 to 4.5 for example.
> The code in the Upgrade442to450.java is not generic, as the name suggests, 
> and simply configures the whole SystemVM and all the existing Domain VMs to 
> use the SystemVM-4.5.0 that was registered. It means that after the upgrade 
> all the routers were marked okay, but they were using the old stuff, from 
> 4.5.0. The attempt to deploy a new VM was also failing with the following 
> error (on the host):
> 2015-11-07 18:17:31,135 DEBUG [kvm.resource.LibvirtComputingResource] 
> (agentRequest-Handler-4:null) Exit value is 1
> 2015-11-07 18:17:31,135 DEBUG [kvm.resource.LibvirtComputingResource] 
> (agentRequest-Handler-4:null) Traceback (most recent call last):  File 
> "/opt/cloud/bin/update_con
> fig.py", line 20, in <module>    from merge import QueueFile  File 
> "/opt/cloud/bin/merge.py", line 23, in <module>    import cs_ip  File 
> "/opt/cloud/bin/cs_ip.py", lin
> e 19, in <module>    from netaddr import *ImportError: No module named netaddr
> Why that? Because the KVM host has the new systemvm.iso, which contains all 
> the new python stuff, but the systemvm template, which installs the Guest OS 
> (Debian) is old and does not contain the modules we now need.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to