From 9fd2b90b80d990c26e65a03890cf88b5725eb4bb Mon Sep 17 00:00:00 2001 From: Abhisar Sinha <63767682+abh1sar@users.noreply.github.com> Date: Mon, 11 Aug 2025 21:20:22 +0530 Subject: [PATCH] Fix ConfigurationVO load exception after schema change (#10485) --- .../com/cloud/upgrade/DatabaseUpgradeChecker.java | 3 +++ .../main/java/com/cloud/upgrade/dao/DbUpgrade.java | 4 ++++ .../com/cloud/upgrade/dao/Upgrade42010to42100.java | 13 +++++++++---- .../framework/config/impl/ConfigDepotImplTest.java | 1 - .../java/com/cloud/utils/db/TransactionLegacy.java | 9 +++++++++ 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java index 1e3b3a7e5ec..827b8f54757 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java @@ -379,6 +379,9 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker { } finally { txn.close(); } + if (upgrade.refreshPoolConnectionsAfterUpgrade()) { + TransactionLegacy.refreshConnections(TransactionLegacy.CLOUD_DB); + } return version; } diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/DbUpgrade.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/DbUpgrade.java index 02c401c8155..6001f940b2c 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/DbUpgrade.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/DbUpgrade.java @@ -38,4 +38,8 @@ public interface DbUpgrade { void performDataMigration(Connection conn); InputStream[] getCleanupScripts(); + + default boolean refreshPoolConnectionsAfterUpgrade() { + return false; + } } diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade42010to42100.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade42010to42100.java index fd52782e57c..786ee5afbc8 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade42010to42100.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade42010to42100.java @@ -16,10 +16,6 @@ // under the License. package com.cloud.upgrade.dao; -import com.cloud.upgrade.SystemVmTemplateRegistration; -import com.cloud.utils.db.TransactionLegacy; -import com.cloud.utils.exception.CloudRuntimeException; - import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; @@ -32,6 +28,10 @@ import java.util.Map; import org.apache.cloudstack.framework.config.ConfigKey; +import com.cloud.upgrade.SystemVmTemplateRegistration; +import com.cloud.utils.db.TransactionLegacy; +import com.cloud.utils.exception.CloudRuntimeException; + public class Upgrade42010to42100 extends DbUpgradeAbstractImpl implements DbUpgrade, DbUpgradeSystemVmTemplate { private SystemVmTemplateRegistration systemVmTemplateRegistration; @@ -212,4 +212,9 @@ public class Upgrade42010to42100 extends DbUpgradeAbstractImpl implements DbUpgr throw new CloudRuntimeException(String.format("Failed to migrate existing configuration scope values to bitmask due to: %s", e.getMessage())); } } + + @Override + public boolean refreshPoolConnectionsAfterUpgrade() { + return true; + } } diff --git a/framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImplTest.java b/framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImplTest.java index a6e62902e15..f4012b43fa8 100644 --- a/framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImplTest.java +++ b/framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImplTest.java @@ -107,7 +107,6 @@ public class ConfigDepotImplTest { String result = configDepotImpl.getConfigStringValue(key, ConfigKey.Scope.Global, null); Assert.assertEquals(value, result); Mockito.verify(_configDao, Mockito.times(configDBRetrieval)).findById(key); - } @Test diff --git a/framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java index 88af397c06a..18a90749e49 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java +++ b/framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java @@ -605,6 +605,15 @@ public class TransactionLegacy implements Closeable { return _conn; } + public static void refreshConnections(final short dbId) { + if (dbId != CLOUD_DB) { + return; + } + if (s_ds instanceof HikariDataSource) { + ((HikariDataSource)s_ds).getHikariPoolMXBean().softEvictConnections(); + } + } + protected boolean takeOver(final String name, final boolean create) { if (_stack.size() != 0) { if (!create) {