CLOUDSTACK-2486: Deleting the host_details and inserting them back can lead to mysql deadlock
- Added the index found missing after upgrade Contained in branches: master Contained in no tag Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/d31217f3 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/d31217f3 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/d31217f3 Branch: refs/heads/master Commit: d31217f3be2786951363e0859ef62d3c0b8c3643 Parents: a13dd59 Author: Prachi Damle <[email protected]> Authored: Tue May 14 17:29:13 2013 -0700 Committer: Prachi Damle <[email protected]> Committed: Wed May 15 11:16:43 2013 -0700 ---------------------------------------------------------------------- .../src/com/cloud/upgrade/dao/Upgrade410to420.java | 69 +++++++++++---- 1 files changed, 51 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d31217f3/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 1bd9abe..ff5e0fb 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java @@ -73,9 +73,10 @@ public class Upgrade410to420 implements DbUpgrade { upgradeDefaultVpcOffering(conn); upgradePhysicalNtwksWithInternalLbProvider(conn); updateNetworkACLs(conn); + addHostDetailsIndex(conn); } - - private void updateSystemVmTemplates(Connection conn) { + + private void updateSystemVmTemplates(Connection conn) { PreparedStatement sql = null; try { sql = conn.prepareStatement("update vm_template set image_data_store_id = 1 where type = 'SYSTEM' or type = 'BUILTIN'"); @@ -91,7 +92,7 @@ public class Upgrade410to420 implements DbUpgrade { } } } - + private void updatePrimaryStore(Connection conn) { PreparedStatement sql = null; PreparedStatement sql2 = null; @@ -100,7 +101,7 @@ public class Upgrade410to420 implements DbUpgrade { sql.setString(1, "ancient primary data store provider"); sql.setString(2, "HOST"); sql.executeUpdate(); - + sql2 = conn.prepareStatement("update storage_pool set storage_provider_name = ? , scope = ? where pool_type != 'Filesystem' and pool_type != 'LVM'"); sql2.setString(1, "ancient primary data store provider"); sql2.setString(2, "CLUSTER"); @@ -114,7 +115,7 @@ public class Upgrade410to420 implements DbUpgrade { } catch (SQLException e) { } } - + if (sql2 != null) { try { sql2.close(); @@ -242,7 +243,7 @@ public class Upgrade410to420 implements DbUpgrade { } } } - + private void createPlaceHolderNics(Connection conn) { PreparedStatement pstmt = null; ResultSet rs = null; @@ -263,7 +264,7 @@ public class Upgrade410to420 implements DbUpgrade { pstmt.setLong(4, networkId); pstmt.executeUpdate(); s_logger.debug("Created placeholder nic for the ipAddress " + ip); - + } } catch (SQLException e) { throw new CloudRuntimeException("Unable to create placeholder nics", e); @@ -279,8 +280,8 @@ public class Upgrade410to420 implements DbUpgrade { } } } - - + + private void updateRemoteAccessVpn(Connection conn) { PreparedStatement pstmt = null; ResultSet rs = null; @@ -560,8 +561,8 @@ public class Upgrade410to420 implements DbUpgrade { } } } - - + + private void upgradeDefaultVpcOffering(Connection conn) { PreparedStatement pstmt = null; @@ -579,7 +580,7 @@ public class Upgrade410to420 implements DbUpgrade { pstmt.setString(3, "InternalLbVm"); pstmt.executeUpdate(); } - + } catch (SQLException e) { throw new CloudRuntimeException("Unable update the default VPC offering with the internal lb service", e); } finally { @@ -594,9 +595,9 @@ public class Upgrade410to420 implements DbUpgrade { } } } - - - + + + private void upgradePhysicalNtwksWithInternalLbProvider(Connection conn) { PreparedStatement pstmt = null; @@ -615,7 +616,7 @@ public class Upgrade410to420 implements DbUpgrade { pstmt.setString(1, uuid); pstmt.setLong(2, pNtwkId); pstmt.executeUpdate(); - + //Add internal lb vm to the list of physical network elements PreparedStatement pstmt1 = conn.prepareStatement("SELECT id FROM `cloud`.`physical_network_service_providers`" + " WHERE physical_network_id=? AND provider_name='InternalLbVm'"); @@ -629,7 +630,7 @@ public class Upgrade410to420 implements DbUpgrade { pstmt1.executeUpdate(); } } - + } catch (SQLException e) { throw new CloudRuntimeException("Unable existing physical networks with internal lb provider", e); } finally { @@ -643,6 +644,38 @@ public class Upgrade410to420 implements DbUpgrade { } catch (SQLException e) { } } - + + } + + private void addHostDetailsIndex(Connection conn) { + s_logger.debug("Checking if host_details index exists, if not we will add it"); + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + pstmt = conn.prepareStatement("SHOW INDEX FROM `cloud`.`host_details` where KEY_NAME = 'fk_host_details__host_id'"); + rs = pstmt.executeQuery(); + if (rs.next()) { + s_logger.debug("Index already exists on host_details - not adding new one"); + } else { + // add the index + PreparedStatement pstmtUpdate = conn.prepareStatement("ALTER IGNORE TABLE `cloud`.`host_details` ADD INDEX `fk_host_details__host_id` (`host_id`)"); + pstmtUpdate.executeUpdate(); + s_logger.debug("Index did not exist on host_details - added new one"); + pstmtUpdate.close(); + } + } catch (SQLException e) { + throw new CloudRuntimeException("Failed to check/update the host_details index ", e); + } finally { + try { + if (rs != null) { + rs.close(); + } + + if (pstmt != null) { + pstmt.close(); + } + } catch (SQLException e) { + } + } } }
