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) { > } > } > >