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 d6dc85dbb9aa..992b2d9ce5a3 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; @@ -27,6 +23,12 @@ import java.util.List; import org.apache.cloudstack.framework.config.ConfigKey; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.config.dao.ConfigurationDaoImpl; + +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; @@ -98,6 +100,8 @@ protected void migrateConfigurationScopeToBitmask(Connection conn) { migrateExistingConfigurationScopeValues(conn); DbUpgradeUtils.dropTableColumnsIfExist(conn, "configuration", List.of("scope")); DbUpgradeUtils.changeTableColumnIfNotExist(conn, "configuration", "new_scope", "scope", "BIGINT NOT NULL DEFAULT 0 COMMENT 'Bitmask for scope(s) of this parameter'"); + ConfigurationDao dao = new ConfigurationDaoImpl(); + dao.markForColumnsRefresh(); } protected void migrateExistingConfigurationScopeValues(Connection conn) { 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 ed752165aeb0..5195d2ff3e3a 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 @@ -101,7 +101,6 @@ private void runTestGetConfigStringValueExpiry(long wait, int configDBRetrieval) 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/GenericDao.java b/framework/db/src/main/java/com/cloud/utils/db/GenericDao.java index 44c312ea9d80..1562f1f7f278 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/GenericDao.java +++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDao.java @@ -311,4 +311,6 @@ public interface GenericDao { Integer countAll(); List findByUuids(String... uuidArray); + + default void markForColumnsRefresh() {} } diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java index bf6fb03563f8..2b68a3ed885b 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java +++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java @@ -42,9 +42,11 @@ import java.util.Date; import java.util.Enumeration; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.TimeZone; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -129,8 +131,11 @@ public abstract class GenericDaoBase extends Compone protected final static TimeZone s_gmtTimeZone = TimeZone.getTimeZone("GMT"); protected final static Map, GenericDao> s_daoMaps = new ConcurrentHashMap, GenericDao>(71); + + private final static Set tableWithColumnsNeedRefresh = new HashSet<>(); private final ConversionSupport _conversionSupport; + protected Class _entityBeanType; protected String _table; @@ -1914,6 +1919,7 @@ protected T toVO(ResultSet result, boolean cache) throws SQLException { @DB() protected void toEntityBean(final ResultSet result, final T entity) throws SQLException { + refreshColumnsIfNeeded(); ResultSetMetaData meta = result.getMetaData(); for (int index = 1, max = meta.getColumnCount(); index <= max; index++) { setField(entity, result, meta, index); @@ -2481,4 +2487,18 @@ public static class SumCount { public SumCount() { } } + + @Override + public void markForColumnsRefresh() { + tableWithColumnsNeedRefresh.add(_table); + } + + private void refreshColumnsIfNeeded() { + if (!tableWithColumnsNeedRefresh.contains(_table)) { + return; + } + final SqlGenerator generator = new SqlGenerator(_entityBeanType); + _allColumns = generator.getAllColumns(); + tableWithColumnsNeedRefresh.remove(_table); + } }