diff --git a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java index 29d3f88fd90..9dd94a97d64 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java @@ -246,4 +246,9 @@ public abstract class ResourceDetailsDaoBase extends G } return resourceDetail.getValue(); } + + public boolean doesKeyValuePairExist(String key, String value) { + List details = findDetails(key, value, null); + return CollectionUtils.isNotEmpty(details); + } } diff --git a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java index 00cf56345c8..030cf3179ad 100644 --- a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java +++ b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java @@ -277,4 +277,10 @@ public class ConfigKey { } } + public boolean hasValueInScope(String value) { + if (value != null && s_depot != null) { + return s_depot.doesConfigKeyAndValueExistInScope(_name, value, _scope); + } + return false; + } } diff --git a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java index 8126b9510a2..d0b722b7df2 100644 --- a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java +++ b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ScopedConfigStorage.java @@ -31,4 +31,10 @@ public interface ScopedConfigStorage { default String getConfigValue(long id, ConfigKey key) { return getConfigValue(id, key.key()); } + + boolean doesKeyValuePairExist(String key, String value); + + default boolean doesConfigKeyAndValueExist(String key, String value) { + return doesKeyValuePairExist(key, value); + } } diff --git a/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java index 8b8b6368527..adc7cb9345a 100644 --- a/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java +++ b/framework/config/src/main/java/org/apache/cloudstack/framework/config/impl/ConfigDepotImpl.java @@ -296,6 +296,27 @@ public class ConfigDepotImpl implements ConfigDepot, ConfigDepotAdmin { return null; } + public boolean doesConfigKeyAndValueExistInScope(String key, String value, ConfigKey.Scope scope) { + if (!ConfigKey.Scope.Global.equals(scope)) { + ScopedConfigStorage scopedConfigStorage = null; + for (ScopedConfigStorage storage : _scopedStorages) { + if (storage.getScope() == scope) { + scopedConfigStorage = storage; + } + } + if (scopedConfigStorage == null) { + logger.warn("Unable to check existence of config key {} and value {} in scope: {}, couldn't find config storage for this scope", key, value, scope); + return false; + } + return scopedConfigStorage.doesConfigKeyAndValueExist(key, value); + } + ConfigurationVO configurationVO = _configDao.findByName(key); + if (configurationVO != null) { + return configurationVO.getValue().equalsIgnoreCase(value); + } + return false; + } + protected Ternary getConfigCacheKey(String key, ConfigKey.Scope scope, Long scopeId) { return new Ternary<>(key, scope, scopeId); } diff --git a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java index 1e6ef1a7852..7cba74b6f40 100644 --- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java @@ -947,7 +947,7 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager { } public boolean isDisabled(final Long zoneId) { - return !(BackupFrameworkEnabled.value() && BackupFrameworkEnabled.valueIn(zoneId)); + return !(BackupFrameworkEnabled.valueIn(zoneId)); } private void validateForZone(final Long zoneId) { @@ -980,7 +980,7 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager { @Override public List> getCommands() { final List> cmdList = new ArrayList>(); - if (!BackupFrameworkEnabled.value()) { + if (!BackupFrameworkEnabled.value() && !BackupFrameworkEnabled.hasValueInScope(Boolean.TRUE.toString())) { return cmdList; }