Kishan,

I know.

If we upgrade from 4.1 to 4.3 ( assume the systemvm template is
systemvm-kvm-4.3). We need to add systemvm-kvm-4.3 instead of
systemvm-kvm-4.2. Maybe systemvm-kvm-4.2 is not in database.
The upgrade includes Upgrade41to42 and Upgrade42to43. It will fail in the
Upgrade41to42.

-Wei


2013/6/5 Kishan Kavala <kishan.kav...@citrix.com>

> Wei,
>  If we use other templates, system Vms may not work. Only 4.2 templates
> should be used when upgrading to 4.2.
>
> > -----Original Message-----
> > From: Wei ZHOU [mailto:ustcweiz...@gmail.com]
> > Sent: Wednesday, 5 June 2013 3:26 PM
> > To: dev@cloudstack.apache.org
> > Subject: Re: git commit: updated refs/heads/master to 9fe7846
> >
> > Kishan,
> >
> > What do you think about change some codes to "name like 'systemvm-
> > xenserver-%' " ?
> > If we use other templates, the upgrade maybe fail.
> >
> > -Wei
> >
> >
> > 2013/6/5 <kis...@apache.org>
> >
> > > Updated Branches:
> > >   refs/heads/master 91b15711b -> 9fe7846d7
> > >
> > >
> > > CLOUDSTACK-2728: 41-42 DB upgrade: add step to upgrade system
> > > templates
> > >
> > >
> > > Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
> > > Commit:
> > > http://git-wip-us.apache.org/repos/asf/cloudstack/commit/9fe7846d
> > > Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/9fe7846d
> > > Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/9fe7846d
> > >
> > > Branch: refs/heads/master
> > > Commit: 9fe7846d72e401720e1dcbce52d021e2646429f1
> > > Parents: 91b1571
> > > Author: Harikrishna Patnala <harikrishna.patn...@citrix.com>
> > > Authored: Mon Jun 3 12:33:58 2013 +0530
> > > Committer: Kishan Kavala <kis...@cloud.com>
> > > Committed: Wed Jun 5 15:14:04 2013 +0530
> > >
> > > ----------------------------------------------------------------------
> > >  .../src/com/cloud/upgrade/dao/Upgrade410to420.java |  209
> > > ++++++++++++++-
> > >  1 files changed, 204 insertions(+), 5 deletions(-)
> > > ----------------------------------------------------------------------
> > >
> > >
> > >
> > > http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9fe7846d/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 1584973..955ea56 100644
> > > --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
> > > +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
> > > @@ -112,16 +112,215 @@ public class Upgrade410to420 implements
> > DbUpgrade {
> > >      }
> > >
> > >      private void updateSystemVmTemplates(Connection conn) {
> > > -           PreparedStatement sql = null;
> > > +
> > > +        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 {
> > > +                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;
> > > +                    }
> > > +                }
> > > +            } 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 xenserer 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();
> > > +                } 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();
> > > +                } 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");
> > > +                    }
> > > +                }
> > > +            } 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();
> > > +                } 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");
> > > +                    }
> > > +                }
> > > +            } 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();
> > > +                } else {
> > > +                    if (Hyperv){
> > > +                        throw new CloudRuntimeException("4.2.0 HyperV
> > > SystemVm template not found. Cannot upgrade system Vms");
> > > +                    } else {
> > > +                        s_logger.warn("4.2.0 Hyperv SystemVm template
> > > + not
> > > found. Hyperv hypervisor is not used, so not failing upgrade");
> > > +                    }
> > > +                }
> > > +            } 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();
> > > +                } 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 {
> > > +            try {
> > > +                if (rs != null) {
> > > +                    rs.close();
> > > +                }
> > > +
> > > +                if (pstmt != null) {
> > > +                    pstmt.close();
> > > +                }
> > > +            } catch (SQLException e) {
> > > +            }
> > > +        }
> > > +        pstmt = null;
> > >          try {
> > > -            sql = conn.prepareStatement("update vm_template set
> > > image_data_store_id = 1 where type = 'SYSTEM' or type = 'BUILTIN'");
> > > -            sql.executeUpdate();
> > > +            pstmt = conn.prepareStatement("update vm_template set
> > > image_data_store_id = 1 where type = 'SYSTEM' or type = 'BUILTIN'");
> > > +            pstmt.executeUpdate();
> > >          } catch (SQLException e) {
> > >              throw new CloudRuntimeException("Failed to upgrade vm
> > > template data store uuid: " + e.toString());
> > >          } finally {
> > > -            if (sql != null) {
> > > +            if (pstmt != null) {
> > >                  try {
> > > -                    sql.close();
> > > +                    pstmt.close();
> > >                  } catch (SQLException e) {
> > >                  }
> > >              }
> > >
> > >
>

Reply via email to