From a860143c1d723c56c555f233c755d6c2658a9836 Mon Sep 17 00:00:00 2001 From: DK101010 Date: Fri, 27 Aug 2021 11:37:01 +0100 Subject: [PATCH 01/10] fix mismatching between db uuids and custom attributes uuids during the datastore cluster creation, cloudstack could not recognize the existing primary storage and create a new one because uuid format not equal --- .../com/cloud/storage/StorageManagerImpl.java | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java index 8cb586d2458e..01ab12c04485 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -222,6 +222,8 @@ import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.VMInstanceDao; +import java.math.BigInteger; +import java.util.UUID; @Component public class StorageManagerImpl extends ManagerBase implements StorageManager, ClusterManagerListener, Configurable { @@ -1788,7 +1790,7 @@ public void syncDatastoreClusterStoragePool(long datastoreClusterPoolId, List nfsStoragePools = _storagePoolDao.findPoolsByStorageType(StoragePoolType.NetworkFilesystem.toString()); for (StoragePoolVO storagePool : nfsStoragePools) { @@ -1834,6 +1836,43 @@ public void syncDatastoreClusterStoragePool(long datastoreClusterPoolId, List childDatastoreAnswerList) { for (ModifyStoragePoolAnswer childDataStoreAnswer : childDatastoreAnswerList) { StoragePoolInfo childStoragePoolInfo = childDataStoreAnswer.getPoolInfo(); From 1744bdd98615dfc74973bb532f171a1cc4229327 Mon Sep 17 00:00:00 2001 From: DK101010 Date: Fri, 27 Aug 2021 14:00:36 +0100 Subject: [PATCH 02/10] remove method call setUuid --- server/src/main/java/com/cloud/storage/StorageManagerImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java index 01ab12c04485..5591158c246e 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -1857,7 +1857,6 @@ private StoragePoolVO getExistingPoolByUuid(String uuid){ uuid = uuid.replaceAll("-", ""); storagePool = _storagePoolDao.findByUuid(uuid); if(storagePool != null){ - storagePool.setUuid(uuid); return storagePool; } } From d869185f5b56623c11deb80874931e92e3bd4c81 Mon Sep 17 00:00:00 2001 From: DK101010 Date: Tue, 21 Sep 2021 10:21:45 +0100 Subject: [PATCH 03/10] add upgrade step to fix faulty pool uuids --- .../upgrade/dao/Upgrade41510to41600.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java index 358fa574faa5..0b8e990c430c 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java @@ -31,6 +31,9 @@ import com.cloud.hypervisor.Hypervisor; import com.cloud.utils.exception.CloudRuntimeException; +import java.math.BigInteger; +import java.util.UUID; +import java.util.logging.Level; public class Upgrade41510to41600 implements DbUpgrade, DbUpgradeSystemVmTemplate { @@ -64,6 +67,30 @@ public InputStream[] getPrepareScripts() { @Override public void performDataMigration(Connection conn) { + fixWrongPoolUuid(conn); + } + + public void fixWrongPoolUuid(Connection conn) { + LOG.debug("Replacement of faulty pool uuids"); + try (PreparedStatement pstmt = conn.prepareStatement("SELECT id,uuid FROM storage_pool " + + "WHERE removed IS NULL;"); ResultSet rs = pstmt.executeQuery()) { + PreparedStatement updateStmt = conn.prepareStatement("update storage_pool set uuid = ? where id = ?"); + while (rs.next()) { + if (!rs.getString(2).contains("-")) { + UUID poolUuid = new UUID( + new BigInteger(rs.getString(2).substring(0, 16), 16).longValue(), + new BigInteger(rs.getString(2).substring(16), 16).longValue() + ); + updateStmt.setLong(2, rs.getLong(1)); + updateStmt.setString(1, poolUuid.toString()); + updateStmt.addBatch(); + } + } + updateStmt.executeBatch(); + } catch (SQLException ex) { + LOG.error("fixWrongPoolUuid:Exception while updating faulty pool uuids" + ex.getMessage()); + throw new CloudRuntimeException("fixWrongPoolUuid:Exception while updating faulty pool uuids", ex); + } } @Override From acdc7b069bc92fc8debbd4071e9c7169cdc3790d Mon Sep 17 00:00:00 2001 From: DK101010 Date: Tue, 21 Sep 2021 15:12:05 +0100 Subject: [PATCH 04/10] adapt method to transform uuid each time --- .../com/cloud/storage/StorageManagerImpl.java | 37 +++---------------- 1 file changed, 6 insertions(+), 31 deletions(-) diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java index 5591158c246e..f9dda5fedea0 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -1836,42 +1836,17 @@ public void syncDatastoreClusterStoragePool(long datastoreClusterPoolId, List childDatastoreAnswerList) { for (ModifyStoragePoolAnswer childDataStoreAnswer : childDatastoreAnswerList) { StoragePoolInfo childStoragePoolInfo = childDataStoreAnswer.getPoolInfo(); From 4aac47994113e4733eda926bcfe5f6652e841f88 Mon Sep 17 00:00:00 2001 From: DK101010 Date: Thu, 23 Sep 2021 07:25:59 +0100 Subject: [PATCH 05/10] extract error msg --- .../main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java index 0b8e990c430c..80c43b5cd415 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java @@ -88,8 +88,9 @@ public void fixWrongPoolUuid(Connection conn) { } updateStmt.executeBatch(); } catch (SQLException ex) { - LOG.error("fixWrongPoolUuid:Exception while updating faulty pool uuids" + ex.getMessage()); - throw new CloudRuntimeException("fixWrongPoolUuid:Exception while updating faulty pool uuids", ex); + String errorMsg = "fixWrongPoolUuid:Exception while updating faulty pool uuids"; + LOG.error(errorMsg + ex.getMessage()); + throw new CloudRuntimeException(errorMsg, ex); } } From ab22868c6061737397514acee6dd1f96a3724b56 Mon Sep 17 00:00:00 2001 From: DK101010 Date: Thu, 23 Sep 2021 07:39:01 +0100 Subject: [PATCH 06/10] rm unused import --- .../main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java index 80c43b5cd415..d843d843a3e6 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41510to41600.java @@ -33,7 +33,7 @@ import com.cloud.utils.exception.CloudRuntimeException; import java.math.BigInteger; import java.util.UUID; -import java.util.logging.Level; + public class Upgrade41510to41600 implements DbUpgrade, DbUpgradeSystemVmTemplate { From e52e7abed1efb51c81e4be18569877aef097539d Mon Sep 17 00:00:00 2001 From: DK101010 Date: Fri, 24 Sep 2021 07:33:10 +0100 Subject: [PATCH 07/10] add exception to log error as parameter --- .../main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java index 31f363e71980..b48b068a9bdc 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java @@ -90,7 +90,7 @@ public void fixWrongPoolUuid(Connection conn) { updateStmt.executeBatch(); } catch (SQLException ex) { String errorMsg = "fixWrongPoolUuid:Exception while updating faulty pool uuids"; - LOG.error(errorMsg + ex.getMessage()); + LOG.error(errorMsg,ex); throw new CloudRuntimeException(errorMsg, ex); } } From 2f4ee054133d19cf4d66717fd0923286e719c8d0 Mon Sep 17 00:00:00 2001 From: DK101010 Date: Tue, 5 Oct 2021 07:46:51 +0100 Subject: [PATCH 08/10] adapt sql to fetch wrong uuids --- .../main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java index b48b068a9bdc..7f0ff5224d3d 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java @@ -74,10 +74,9 @@ public void performDataMigration(Connection conn) { public void fixWrongPoolUuid(Connection conn) { LOG.debug("Replacement of faulty pool uuids"); try (PreparedStatement pstmt = conn.prepareStatement("SELECT id,uuid FROM storage_pool " - + "WHERE removed IS NULL;"); ResultSet rs = pstmt.executeQuery()) { + + "WHERE uuid NOT LIKE \"%-%-%-%\" AND removed IS NULL;"); ResultSet rs = pstmt.executeQuery()) { PreparedStatement updateStmt = conn.prepareStatement("update storage_pool set uuid = ? where id = ?"); while (rs.next()) { - if (!rs.getString(2).contains("-")) { UUID poolUuid = new UUID( new BigInteger(rs.getString(2).substring(0, 16), 16).longValue(), new BigInteger(rs.getString(2).substring(16), 16).longValue() @@ -85,7 +84,6 @@ public void fixWrongPoolUuid(Connection conn) { updateStmt.setLong(2, rs.getLong(1)); updateStmt.setString(1, poolUuid.toString()); updateStmt.addBatch(); - } } updateStmt.executeBatch(); } catch (SQLException ex) { From 2ad1b3c2a8c4ad1f7450ce5284b1d2d877037dbc Mon Sep 17 00:00:00 2001 From: DK101010 Date: Tue, 8 Mar 2022 07:53:13 +0000 Subject: [PATCH 09/10] rm spaces --- .../main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java index 4a22363b1bc7..bf6166e96b71 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java @@ -99,7 +99,7 @@ public void fixWrongPoolUuid(Connection conn) { } catch (SQLException ex) { String errorMsg = "fixWrongPoolUuid:Exception while updating faulty pool uuids"; LOG.error(errorMsg,ex); - throw new CloudRuntimeException(errorMsg, ex); + throw new CloudRuntimeException(errorMsg, ex); } } From a390dd2d9f2815c49859ca0632643567bd50f252 Mon Sep 17 00:00:00 2001 From: DK101010 Date: Mon, 21 Mar 2022 13:47:11 +0000 Subject: [PATCH 10/10] move upgrade code to Upgrade41610to41700 --- .../upgrade/dao/Upgrade41520to41600.java | 25 ----------------- .../upgrade/dao/Upgrade41610to41700.java | 28 +++++++++++++++++++ 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java index bf6166e96b71..05eb2c7df556 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41520to41600.java @@ -33,8 +33,6 @@ import org.apache.log4j.Logger; import com.cloud.utils.exception.CloudRuntimeException; -import java.math.BigInteger; -import java.util.UUID; public class Upgrade41520to41600 implements DbUpgrade, DbUpgradeSystemVmTemplate { @@ -78,29 +76,6 @@ public void performDataMigration(Connection conn) { generateUuidForExistingSshKeyPairs(conn); populateAnnotationPermissions(conn); correctGuestOsIdsInHypervisorMapping(conn); - fixWrongPoolUuid(conn); - } - - public void fixWrongPoolUuid(Connection conn) { - LOG.debug("Replacement of faulty pool uuids"); - try (PreparedStatement pstmt = conn.prepareStatement("SELECT id,uuid FROM storage_pool " - + "WHERE uuid NOT LIKE \"%-%-%-%\" AND removed IS NULL;"); ResultSet rs = pstmt.executeQuery()) { - PreparedStatement updateStmt = conn.prepareStatement("update storage_pool set uuid = ? where id = ?"); - while (rs.next()) { - UUID poolUuid = new UUID( - new BigInteger(rs.getString(2).substring(0, 16), 16).longValue(), - new BigInteger(rs.getString(2).substring(16), 16).longValue() - ); - updateStmt.setLong(2, rs.getLong(1)); - updateStmt.setString(1, poolUuid.toString()); - updateStmt.addBatch(); - } - updateStmt.executeBatch(); - } catch (SQLException ex) { - String errorMsg = "fixWrongPoolUuid:Exception while updating faulty pool uuids"; - LOG.error(errorMsg,ex); - throw new CloudRuntimeException(errorMsg, ex); - } } private void correctGuestOsIdsInHypervisorMapping(final Connection conn) { diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41610to41700.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41610to41700.java index 7d65b432ed33..dd22c2b743d9 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41610to41700.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41610to41700.java @@ -21,7 +21,12 @@ import org.apache.log4j.Logger; import java.io.InputStream; +import java.math.BigInteger; import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; public class Upgrade41610to41700 implements DbUpgrade, DbUpgradeSystemVmTemplate { @@ -56,6 +61,7 @@ public InputStream[] getPrepareScripts() { @Override public void performDataMigration(Connection conn) { + fixWrongPoolUuid(conn); } @Override @@ -83,4 +89,26 @@ public void updateSystemVmTemplates(Connection conn) { throw new CloudRuntimeException("Failed to find / register SystemVM template(s)"); } } + + public void fixWrongPoolUuid(Connection conn) { + LOG.debug("Replacement of faulty pool uuids"); + try (PreparedStatement pstmt = conn.prepareStatement("SELECT id,uuid FROM storage_pool " + + "WHERE uuid NOT LIKE \"%-%-%-%\" AND removed IS NULL;"); ResultSet rs = pstmt.executeQuery()) { + PreparedStatement updateStmt = conn.prepareStatement("update storage_pool set uuid = ? where id = ?"); + while (rs.next()) { + UUID poolUuid = new UUID( + new BigInteger(rs.getString(2).substring(0, 16), 16).longValue(), + new BigInteger(rs.getString(2).substring(16), 16).longValue() + ); + updateStmt.setLong(2, rs.getLong(1)); + updateStmt.setString(1, poolUuid.toString()); + updateStmt.addBatch(); + } + updateStmt.executeBatch(); + } catch (SQLException ex) { + String errorMsg = "fixWrongPoolUuid:Exception while updating faulty pool uuids"; + LOG.error(errorMsg,ex); + throw new CloudRuntimeException(errorMsg, ex); + } + } }