This is an automated email from the ASF dual-hosted git repository.

DaanHoogland pushed a commit to branch ghi10752-config-snapshot-usage
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit 759c73c40001b901886106bc0eb840ea4587d6d3
Author: Daan Hoogland <[email protected]>
AuthorDate: Thu Oct 22 11:35:33 2026 +0200

    use ConfigKeys for snapshot, VM snapshot and usage settings
    
    Part of the split of #13884 (phase out the Config enum, #10752).
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
---
 .../vmsnapshot/DefaultVMSnapshotStrategy.java      |  8 +---
 .../vmsnapshot/ScaleIOVMSnapshotStrategy.java      |  8 +---
 .../storage/helper/HypervisorHelperImpl.java       |  8 +---
 .../apache/cloudstack/quota/QuotaManagerImpl.java  |  3 +-
 .../apache/cloudstack/quota/QuotaServiceImpl.java  |  4 +-
 .../cloudstack/quota/QuotaServiceImplTest.java     |  2 -
 .../configuration/ConfigurationManagerImpl.java    |  4 +-
 .../cloud/ha/HighAvailabilityManagerExtImpl.java   |  7 +---
 .../com/cloud/network/NetworkUsageManagerImpl.java |  8 ++--
 .../router/VirtualNetworkApplianceManagerImpl.java |  6 +--
 .../main/java/com/cloud/server/StatsCollector.java |  6 +--
 .../storage/snapshot/SnapshotSchedulerImpl.java    | 37 ++++++++++++------
 .../java/com/cloud/usage/UsageServiceImpl.java     |  7 ++--
 .../main/java/com/cloud/vm/UserVmManagerImpl.java  |  4 +-
 .../cloud/vm/snapshot/VMSnapshotManagerImpl.java   | 10 +----
 .../java/com/cloud/usage/UsageManagerImpl.java     | 44 ++++++----------------
 16 files changed, 66 insertions(+), 100 deletions(-)

diff --git 
a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
 
b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
index 665c3a4659c..fee98ee8536 100644
--- 
a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
+++ 
b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
@@ -38,7 +38,6 @@ import org.apache.cloudstack.backup.dao.BackupOfferingDao;
 import org.apache.cloudstack.engine.subsystem.api.storage.StrategyPriority;
 import org.apache.cloudstack.engine.subsystem.api.storage.VMSnapshotOptions;
 import org.apache.cloudstack.engine.subsystem.api.storage.VMSnapshotStrategy;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.to.VolumeObjectTO;
 import org.apache.commons.collections4.CollectionUtils;
@@ -71,7 +70,6 @@ import com.cloud.storage.dao.GuestOSDao;
 import com.cloud.storage.dao.GuestOSHypervisorDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.uservm.UserVm;
-import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Transaction;
@@ -83,6 +81,7 @@ import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.snapshot.VMSnapshot;
+import com.cloud.vm.snapshot.VMSnapshotManager;
 import com.cloud.vm.snapshot.VMSnapshotVO;
 import com.cloud.vm.snapshot.dao.VMSnapshotDao;
 
@@ -99,8 +98,6 @@ public class DefaultVMSnapshotStrategy extends ManagerBase 
implements VMSnapshot
     VMSnapshotDao vmSnapshotDao;
     int _wait;
     @Inject
-    ConfigurationDao configurationDao;
-    @Inject
     AgentManager agentMgr;
     @Inject
     VolumeDao volumeDao;
@@ -129,8 +126,7 @@ public class DefaultVMSnapshotStrategy extends ManagerBase 
implements VMSnapshot
 
     @Override
     public boolean configure(String name, Map<String, Object> params) throws 
ConfigurationException {
-        String value = configurationDao.getValue("vmsnapshot.create.wait");
-        _wait = NumbersUtil.parseInt(value, 1800);
+        _wait = VMSnapshotManager.VMSnapshotCreateWait.value();
         return true;
     }
 
diff --git 
a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/ScaleIOVMSnapshotStrategy.java
 
b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/ScaleIOVMSnapshotStrategy.java
index a18d65748cf..9c39c7de84c 100644
--- 
a/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/ScaleIOVMSnapshotStrategy.java
+++ 
b/engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/ScaleIOVMSnapshotStrategy.java
@@ -29,7 +29,6 @@ import javax.naming.ConfigurationException;
 import com.cloud.storage.StoragePool;
 import org.apache.cloudstack.engine.subsystem.api.storage.StrategyPriority;
 import org.apache.cloudstack.engine.subsystem.api.storage.VMSnapshotStrategy;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.storage.datastore.api.SnapshotGroup;
 import org.apache.cloudstack.storage.datastore.client.ScaleIOGatewayClient;
 import 
org.apache.cloudstack.storage.datastore.client.ScaleIOGatewayClientConnectionPool;
@@ -55,7 +54,6 @@ import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.uservm.UserVm;
-import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Transaction;
@@ -66,6 +64,7 @@ import com.cloud.utils.fsm.NoTransitionException;
 import com.cloud.vm.UserVmVO;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.snapshot.VMSnapshot;
+import com.cloud.vm.snapshot.VMSnapshotManager;
 import com.cloud.vm.snapshot.VMSnapshotDetailsVO;
 import com.cloud.vm.snapshot.VMSnapshotVO;
 import com.cloud.vm.snapshot.dao.VMSnapshotDao;
@@ -82,8 +81,6 @@ public class ScaleIOVMSnapshotStrategy extends ManagerBase 
implements VMSnapshot
     protected VMSnapshotDetailsDao vmSnapshotDetailsDao;
     int _wait;
     @Inject
-    ConfigurationDao configurationDao;
-    @Inject
     VolumeDao volumeDao;
     @Inject
     DiskOfferingDao diskOfferingDao;
@@ -96,8 +93,7 @@ public class ScaleIOVMSnapshotStrategy extends ManagerBase 
implements VMSnapshot
 
     @Override
     public boolean configure(String name, Map<String, Object> params) throws 
ConfigurationException {
-        String value = configurationDao.getValue("vmsnapshot.create.wait");
-        _wait = NumbersUtil.parseInt(value, 1800);
+        _wait = VMSnapshotManager.VMSnapshotCreateWait.value();
         return true;
     }
 
diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
index 10af5d55d61..f65a9798878 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
@@ -29,7 +29,6 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
 import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.storage.command.ForgetObjectCmd;
 import org.apache.cloudstack.storage.command.IntroduceObjectAnswer;
 import org.apache.cloudstack.storage.command.IntroduceObjectCmd;
@@ -51,10 +50,10 @@ import com.cloud.storage.GuestOSHypervisorVO;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.dao.GuestOSDao;
 import com.cloud.storage.dao.GuestOSHypervisorDao;
-import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.snapshot.VMSnapshot;
+import com.cloud.vm.snapshot.VMSnapshotManager;
 
 public class HypervisorHelperImpl implements HypervisorHelper {
     protected Logger logger = LogManager.getLogger(getClass());
@@ -67,8 +66,6 @@ public class HypervisorHelperImpl implements HypervisorHelper 
{
     @Inject
     GuestOSHypervisorDao guestOsHypervisorDao;
     @Inject
-    ConfigurationDao configurationDao;
-    @Inject
     AgentManager agentMgr;
     @Inject
     HostDao hostDao;
@@ -117,8 +114,7 @@ public class HypervisorHelperImpl implements 
HypervisorHelper {
 
     @Override
     public VMSnapshotTO quiesceVm(VirtualMachine virtualMachine) {
-        String value = configurationDao.getValue("vmsnapshot.create.wait");
-        int wait = NumbersUtil.parseInt(value, 1800);
+        int wait = VMSnapshotManager.VMSnapshotCreateWait.value();
         Long hostId = vmSnapshotHelper.pickRunningHost(virtualMachine.getId());
         VMSnapshotTO vmSnapshotTO = new VMSnapshotTO(1L,  
UUID.randomUUID().toString(), VMSnapshot.Type.Disk, null, null, false,
                 null, true);
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
index 01bb9bc7e7a..df37d82efa7 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
@@ -54,6 +54,7 @@ import org.apache.cloudstack.quota.vo.QuotaBalanceVO;
 import org.apache.cloudstack.quota.vo.QuotaTariffUsageVO;
 import org.apache.cloudstack.quota.vo.QuotaTariffVO;
 import org.apache.cloudstack.quota.vo.QuotaUsageVO;
+import org.apache.cloudstack.usage.UsageService;
 import org.apache.cloudstack.usage.UsageTypes;
 import org.apache.cloudstack.usage.UsageUnitTypes;
 import org.apache.cloudstack.utils.bytescale.ByteScaleUtils;
@@ -124,7 +125,7 @@ public class QuotaManagerImpl extends ManagerBase 
implements QuotaManager {
             mergeConfigs(configs, params);
         }
 
-        String usageAggregationTimeZoneStr = 
ObjectUtils.defaultIfNull(configs.get("usage.aggregation.timezone"), "GMT");
+        String usageAggregationTimeZoneStr = 
ObjectUtils.defaultIfNull(UsageService.UsageAggregationTimezone.value(), "GMT");
         usageAggregationTimeZone = 
TimeZone.getTimeZone(usageAggregationTimeZoneStr);
 
         return true;
diff --git 
a/plugins/database/quota/src/main/java/org/apache/cloudstack/quota/QuotaServiceImpl.java
 
b/plugins/database/quota/src/main/java/org/apache/cloudstack/quota/QuotaServiceImpl.java
index a788f0c8b01..7a0ff05138b 100644
--- 
a/plugins/database/quota/src/main/java/org/apache/cloudstack/quota/QuotaServiceImpl.java
+++ 
b/plugins/database/quota/src/main/java/org/apache/cloudstack/quota/QuotaServiceImpl.java
@@ -59,11 +59,11 @@ import org.apache.cloudstack.quota.dao.QuotaUsageJoinDao;
 import org.apache.cloudstack.quota.vo.QuotaAccountVO;
 import org.apache.cloudstack.quota.vo.QuotaBalanceVO;
 import org.apache.cloudstack.quota.vo.QuotaUsageJoinVO;
+import org.apache.cloudstack.usage.UsageService;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.stereotype.Component;
 
-import com.cloud.configuration.Config;
 import com.cloud.domain.dao.DomainDao;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.user.Account;
@@ -103,7 +103,7 @@ public class QuotaServiceImpl extends ManagerBase 
implements QuotaService, Confi
     public boolean configure(String name, Map<String, Object> params) throws 
ConfigurationException {
         super.configure(name, params);
 
-        String timeZoneStr = 
ObjectUtils.defaultIfNull(_configDao.getValue(Config.UsageAggregationTimezone.toString()),
 "GMT");
+        String timeZoneStr = 
ObjectUtils.defaultIfNull(UsageService.UsageAggregationTimezone.value(), "GMT");
         _usageTimezone = TimeZone.getTimeZone(timeZoneStr);
 
         return true;
diff --git 
a/plugins/database/quota/src/test/java/org/apache/cloudstack/quota/QuotaServiceImplTest.java
 
b/plugins/database/quota/src/test/java/org/apache/cloudstack/quota/QuotaServiceImplTest.java
index c0ee6c5fc3f..9126c36a203 100644
--- 
a/plugins/database/quota/src/test/java/org/apache/cloudstack/quota/QuotaServiceImplTest.java
+++ 
b/plugins/database/quota/src/test/java/org/apache/cloudstack/quota/QuotaServiceImplTest.java
@@ -16,7 +16,6 @@
 // under the License.
 package org.apache.cloudstack.quota;
 
-import com.cloud.configuration.Config;
 import com.cloud.domain.dao.DomainDao;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.user.AccountVO;
@@ -109,7 +108,6 @@ public class QuotaServiceImplTest extends TestCase {
         QuotaResponseBuilderField.setAccessible(true);
         QuotaResponseBuilderField.set(quotaServiceImplSpy, respBldr);
 
-        
Mockito.when(configDao.getValue(Mockito.eq(Config.UsageAggregationTimezone.toString()))).thenReturn("IST");
         quotaServiceImplSpy.configure("randomName", null);
     }
 
diff --git 
a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java 
b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index c68dc390df2..f22bcfe9fa3 100644
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -277,6 +277,7 @@ import com.cloud.org.Grouping.AllocationState;
 import com.cloud.projects.Project;
 import com.cloud.projects.ProjectManager;
 import com.cloud.resourcelimit.CheckedReservation;
+import com.cloud.server.ManagementServer;
 import com.cloud.server.ManagementService;
 import com.cloud.service.ServiceOfferingDetailsVO;
 import com.cloud.service.ServiceOfferingVO;
@@ -294,6 +295,7 @@ import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.StoragePoolTagsDao;
 import com.cloud.storage.dao.VMTemplateZoneDao;
 import com.cloud.storage.dao.VolumeDao;
+import com.cloud.storage.snapshot.SnapshotManager;
 import com.cloud.test.IPRangeConfig;
 import com.cloud.user.Account;
 import com.cloud.user.AccountDetailVO;
@@ -606,7 +608,7 @@ public class ConfigurationManagerImpl extends ManagerBase 
implements Configurati
         configValuesForValidation.add("host.stats.interval");
         configValuesForValidation.add("network.gc.interval");
         configValuesForValidation.add("ping.interval");
-        configValuesForValidation.add("snapshot.poll.interval");
+        
configValuesForValidation.add(SnapshotManager.SnapshotPollInterval.key());
         configValuesForValidation.add("storage.stats.interval");
         configValuesForValidation.add("storage.cleanup.interval");
         configValuesForValidation.add("wait");
diff --git 
a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerExtImpl.java 
b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerExtImpl.java
index 6765992ec27..56bcdd33870 100644
--- a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerExtImpl.java
+++ b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerExtImpl.java
@@ -23,8 +23,8 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.managed.context.ManagedContextRunnable;
+import org.apache.cloudstack.usage.UsageService;
 
 import com.cloud.alert.AlertManager;
 import com.cloud.usage.dao.UsageJobDao;
@@ -35,9 +35,6 @@ public class HighAvailabilityManagerExtImpl extends 
HighAvailabilityManagerImpl
     @Inject
     UsageJobDao _usageJobDao;
 
-    @Inject
-    ConfigurationDao configDao;
-
     @Override
     public boolean configure(final String name, final Map<String, Object> 
xmlParams) throws ConfigurationException {
         super.configure(name, xmlParams);
@@ -48,7 +45,7 @@ public class HighAvailabilityManagerExtImpl extends 
HighAvailabilityManagerImpl
     public boolean start() {
         super.start();
 
-        boolean enableUsage = new 
Boolean(configDao.getValue("enable.usage.server"));
+        boolean enableUsage = UsageService.EnableUsageServer.value();
 
         //By default, usage is enabled for production
         //Devs might override this value to disable usage in their setup
diff --git 
a/server/src/main/java/com/cloud/network/NetworkUsageManagerImpl.java 
b/server/src/main/java/com/cloud/network/NetworkUsageManagerImpl.java
index ac1133c734a..81da8cf1da4 100644
--- a/server/src/main/java/com/cloud/network/NetworkUsageManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkUsageManagerImpl.java
@@ -49,7 +49,6 @@ import com.cloud.agent.api.RecurringNetworkUsageCommand;
 import com.cloud.agent.api.StartupCommand;
 import com.cloud.agent.api.StartupTrafficMonitorCommand;
 import com.cloud.agent.manager.Commands;
-import com.cloud.configuration.Config;
 import com.cloud.dc.DataCenterVO;
 import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.event.EventTypes;
@@ -78,7 +77,6 @@ import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
 import com.cloud.user.UserStatisticsVO;
 import com.cloud.user.dao.UserStatisticsDao;
-import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GlobalLock;
@@ -222,9 +220,9 @@ public class NetworkUsageManagerImpl extends ManagerBase 
implements NetworkUsage
         AllocatedIpSearch.join("network", networkJoin, 
AllocatedIpSearch.entity().getSourceNetworkId(), networkJoin.entity().getId(), 
JoinBuilder.JoinType.INNER);
         AllocatedIpSearch.done();
 
-        _networkStatsInterval = 
NumbersUtil.parseInt(_configDao.getValue(Config.DirectNetworkStatsInterval.key()),
 86400);
-        _TSinclZones = 
_configDao.getValue(Config.TrafficSentinelIncludeZones.key());
-        _TSexclZones = 
_configDao.getValue(Config.TrafficSentinelExcludeZones.key());
+        _networkStatsInterval = DirectNetworkStatsInterval.value();
+        _TSinclZones = TrafficSentinelIncludeZones.value();
+        _TSexclZones = TrafficSentinelExcludeZones.value();
         _agentMgr.registerForHostEvents(new 
DirectNetworkStatsListener(_networkStatsInterval), true, false, false);
         
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), 
this);
         return true;
diff --git 
a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
 
b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index de793b5e610..edcaa84de3f 100644
--- 
a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -74,6 +74,7 @@ import org.apache.cloudstack.network.BgpPeer;
 import org.apache.cloudstack.network.RoutedIpv4Manager;
 import org.apache.cloudstack.network.topology.NetworkTopology;
 import org.apache.cloudstack.network.topology.NetworkTopologyContext;
+import org.apache.cloudstack.usage.UsageService;
 import org.apache.cloudstack.userdata.UserDataManager;
 import org.apache.cloudstack.utils.CloudStackVersion;
 import org.apache.cloudstack.utils.identity.ManagementServerNode;
@@ -599,9 +600,8 @@ Configurable, StateListener<VirtualMachine.State, 
VirtualMachine.Event, VirtualM
 
         NetworkHelperImpl.setSystemAccount(_accountMgr.getSystemAccount());
 
-        final String aggregationRange = 
configs.get("usage.stats.job.aggregation.range");
-        _usageAggregationRange = NumbersUtil.parseInt(aggregationRange, 1440);
-        _usageTimeZone = configs.get("usage.aggregation.timezone");
+        _usageAggregationRange = 
UsageService.UsageStatsJobAggregationRange.value();
+        _usageTimeZone = UsageService.UsageAggregationTimezone.value();
         if (_usageTimeZone == null) {
             _usageTimeZone = "GMT";
         }
diff --git a/server/src/main/java/com/cloud/server/StatsCollector.java 
b/server/src/main/java/com/cloud/server/StatsCollector.java
index f4ad46272f2..16f49728a2c 100644
--- a/server/src/main/java/com/cloud/server/StatsCollector.java
+++ b/server/src/main/java/com/cloud/server/StatsCollector.java
@@ -60,6 +60,7 @@ import org.apache.cloudstack.management.ManagementServerHost;
 import org.apache.cloudstack.network.RoutedIpv4Manager;
 import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+import org.apache.cloudstack.usage.UsageService;
 import org.apache.cloudstack.utils.bytescale.ByteScaleUtils;
 import org.apache.cloudstack.utils.graphite.GraphiteClient;
 import org.apache.cloudstack.utils.graphite.GraphiteException;
@@ -562,9 +563,8 @@ public class StatsCollector extends ManagerBase implements 
ComponentMethodInterc
         //Schedule disk stats update task
         _diskStatsUpdateExecutor = Executors.newScheduledThreadPool(1, new 
NamedThreadFactory("DiskStatsUpdater"));
 
-        String aggregationRange = 
configs.get("usage.stats.job.aggregation.range");
-        _usageAggregationRange = NumbersUtil.parseInt(aggregationRange, 1440);
-        _usageTimeZone = configs.get("usage.aggregation.timezone");
+        _usageAggregationRange = 
UsageService.UsageStatsJobAggregationRange.value();
+        _usageTimeZone = UsageService.UsageAggregationTimezone.value();
         if (_usageTimeZone == null) {
             _usageTimeZone = "GMT";
         }
diff --git 
a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java 
b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
index ddaa96100bd..8895d8be3a7 100644
--- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
+++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
@@ -30,7 +30,7 @@ import javax.naming.ConfigurationException;
 import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.framework.jobs.AsyncJobDispatcher;
 import org.apache.cloudstack.framework.jobs.AsyncJobManager;
 import org.apache.cloudstack.framework.jobs.dao.AsyncJobDao;
@@ -58,7 +58,6 @@ import com.cloud.user.User;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.utils.DateUtil;
 import com.cloud.utils.DateUtil.IntervalType;
-import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.concurrency.TestClock;
@@ -85,9 +84,23 @@ public class SnapshotSchedulerImpl extends ManagerBase 
implements SnapshotSchedu
     @Inject
     protected VolumeDao _volsDao;
     @Inject
-    protected ConfigurationDao _configDao;
-    @Inject
     protected ApiDispatcher _dispatcher;
+
+    // QA-only test hook: lets snapshots be scheduled on an accelerated, 
admin-configured clock instead of a real calendar.
+    private static final ConfigKey<Boolean> SnapshotRecurringTest = new 
ConfigKey<>("Advanced", Boolean.class, "snapshot.recurring.test", "false",
+            "Enable accelerated snapshot recurrence for testing purposes.", 
true);
+    private static final ConfigKey<Integer> SnapshotTestMinutesPerHour = new 
ConfigKey<>("Advanced", Integer.class, "snapshot.test.minutes.per.hour", "60",
+            "Minutes per simulated hour when snapshot.recurring.test is 
enabled.", true);
+    private static final ConfigKey<Integer> SnapshotTestHoursPerDay = new 
ConfigKey<>("Advanced", Integer.class, "snapshot.test.hours.per.day", "24",
+            "Hours per simulated day when snapshot.recurring.test is 
enabled.", true);
+    private static final ConfigKey<Integer> SnapshotTestDaysPerWeek = new 
ConfigKey<>("Advanced", Integer.class, "snapshot.test.days.per.week", "7",
+            "Days per simulated week when snapshot.recurring.test is 
enabled.", true);
+    private static final ConfigKey<Integer> SnapshotTestDaysPerMonth = new 
ConfigKey<>("Advanced", Integer.class, "snapshot.test.days.per.month", "30",
+            "Days per simulated month when snapshot.recurring.test is 
enabled.", true);
+    private static final ConfigKey<Integer> SnapshotTestWeeksPerMonth = new 
ConfigKey<>("Advanced", Integer.class, "snapshot.test.weeks.per.month", "4",
+            "Weeks per simulated month when snapshot.recurring.test is 
enabled.", true);
+    private static final ConfigKey<Integer> SnapshotTestMonthsPerYear = new 
ConfigKey<>("Advanced", Integer.class, "snapshot.test.months.per.year", "12",
+            "Months per simulated year when snapshot.recurring.test is 
enabled.", true);
     @Inject
     protected AccountDao _acctDao;
     @Inject
@@ -446,16 +459,16 @@ public class SnapshotSchedulerImpl extends ManagerBase 
implements SnapshotSchedu
     @Override
     public boolean configure(final String name, final Map<String, Object> 
params) throws ConfigurationException {
 
-        _snapshotPollInterval = 
NumbersUtil.parseInt(_configDao.getValue("snapshot.poll.interval"), 300);
-        final boolean snapshotsRecurringTest = 
Boolean.parseBoolean(_configDao.getValue("snapshot.recurring.test"));
+        _snapshotPollInterval = SnapshotManager.SnapshotPollInterval.value();
+        final boolean snapshotsRecurringTest = SnapshotRecurringTest.value();
         if (snapshotsRecurringTest) {
             // look for some test values in the configuration table so that 
snapshots can be taken more frequently (QA test code)
-            final int minutesPerHour = 
NumbersUtil.parseInt(_configDao.getValue("snapshot.test.minutes.per.hour"), 60);
-            final int hoursPerDay = 
NumbersUtil.parseInt(_configDao.getValue("snapshot.test.hours.per.day"), 24);
-            final int daysPerWeek = 
NumbersUtil.parseInt(_configDao.getValue("snapshot.test.days.per.week"), 7);
-            final int daysPerMonth = 
NumbersUtil.parseInt(_configDao.getValue("snapshot.test.days.per.month"), 30);
-            final int weeksPerMonth = 
NumbersUtil.parseInt(_configDao.getValue("snapshot.test.weeks.per.month"), 4);
-            final int monthsPerYear = 
NumbersUtil.parseInt(_configDao.getValue("snapshot.test.months.per.year"), 12);
+            final int minutesPerHour = SnapshotTestMinutesPerHour.value();
+            final int hoursPerDay = SnapshotTestHoursPerDay.value();
+            final int daysPerWeek = SnapshotTestDaysPerWeek.value();
+            final int daysPerMonth = SnapshotTestDaysPerMonth.value();
+            final int weeksPerMonth = SnapshotTestWeeksPerMonth.value();
+            final int monthsPerYear = SnapshotTestMonthsPerYear.value();
 
             _testTimerTask = new TestClock(this, minutesPerHour, hoursPerDay, 
daysPerWeek, daysPerMonth, weeksPerMonth, monthsPerYear);
         }
diff --git a/server/src/main/java/com/cloud/usage/UsageServiceImpl.java 
b/server/src/main/java/com/cloud/usage/UsageServiceImpl.java
index d0a4a0bac8b..9bc91f5704f 100644
--- a/server/src/main/java/com/cloud/usage/UsageServiceImpl.java
+++ b/server/src/main/java/com/cloud/usage/UsageServiceImpl.java
@@ -42,7 +42,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Component;
 
-import com.cloud.configuration.Config;
 import com.cloud.domain.Domain;
 import com.cloud.domain.DomainVO;
 import com.cloud.domain.dao.DomainDao;
@@ -140,10 +139,10 @@ public class UsageServiceImpl extends ManagerBase 
implements UsageService, Manag
     public boolean configure(String name, Map<String, Object> params) throws 
ConfigurationException {
         super.configure(name, params);
 
-        String timeZoneStr = 
ObjectUtils.defaultIfNull(_configDao.getValue(Config.UsageAggregationTimezone.toString()),
 "GMT");
+        String timeZoneStr = 
ObjectUtils.defaultIfNull(UsageAggregationTimezone.value(), "GMT");
         _usageTimezone = TimeZone.getTimeZone(timeZoneStr);
 
-        String executionTimeZone = 
_configDao.getValue(Config.UsageExecutionTimezone.toString());
+        String executionTimeZone = UsageExecutionTimezone.value();
         if (executionTimeZone != null) {
             usageExecutionTimeZone = TimeZone.getTimeZone(executionTimeZone);
         }
@@ -482,7 +481,7 @@ public class UsageServiceImpl extends ManagerBase 
implements UsageService, Manag
             throw new InvalidParameterValueException("Interval should be 
greater than 0.");
         }
 
-        String jobExecTime = 
_configDao.getValue(Config.UsageStatsJobExecTime.toString());
+        String jobExecTime = UsageStatsJobExecTime.value();
         Date previousJobExecTime = 
UsageUtils.getPreviousJobExecutionTime(usageExecutionTimeZone, jobExecTime);
         Date nextJobExecTime = 
UsageUtils.getNextJobExecutionTime(usageExecutionTimeZone, jobExecTime);
         if (ObjectUtils.allNotNull(previousJobExecTime, nextJobExecTime)) {
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java 
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index bd9c3b9fcb8..e0aacda6eff 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -160,6 +160,7 @@ import 
org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 import org.apache.cloudstack.storage.template.VnfTemplateManager;
+import org.apache.cloudstack.usage.UsageService;
 import org.apache.cloudstack.userdata.UserDataManager;
 import org.apache.cloudstack.utils.bytescale.ByteScaleUtils;
 import org.apache.cloudstack.utils.security.ParserUtils;
@@ -2615,8 +2616,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
 
         _vmIpFetchExecutor =   Executors.newScheduledThreadPool(vmipwrks, new 
NamedThreadFactory("UserVm-ipfetch"));
 
-        String aggregationRange = 
configs.get("usage.stats.job.aggregation.range");
-        int _usageAggregationRange  = NumbersUtil.parseInt(aggregationRange, 
1440);
+        int _usageAggregationRange = 
UsageService.UsageStatsJobAggregationRange.value();
         int HOURLY_TIME = 60;
         final int DAILY_TIME = 60 * 24;
         if (_usageAggregationRange == DAILY_TIME) {
diff --git 
a/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java 
b/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
index bef33fc3bf9..2a0d270f92b 100644
--- a/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java
@@ -41,7 +41,6 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.framework.config.Configurable;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.framework.jobs.AsyncJob;
 import org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext;
 import org.apache.cloudstack.framework.jobs.AsyncJobManager;
@@ -97,7 +96,6 @@ import com.cloud.user.User;
 import com.cloud.user.dao.AccountDao;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.DateUtil;
-import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Predicate;
 import com.cloud.utils.ReflectionUse;
@@ -148,7 +146,6 @@ public class VMSnapshotManagerImpl extends 
MutualExclusiveIdsManagerBase impleme
     @Inject GuestOSDao _guestOSDao;
     @Inject SnapshotDao _snapshotDao;
     @Inject VirtualMachineManager _itMgr;
-    @Inject ConfigurationDao _configDao;
     @Inject HypervisorCapabilitiesDao _hypervisorCapabilitiesDao;
     @Inject
     StorageStrategyFactory storageStrategyFactory;
@@ -192,12 +189,7 @@ public class VMSnapshotManagerImpl extends 
MutualExclusiveIdsManagerBase impleme
     @Override
     public boolean configure(String name, Map<String, Object> params) throws 
ConfigurationException {
         _name = name;
-        if (_configDao == null) {
-            throw new ConfigurationException("Unable to get the configuration 
dao.");
-        }
-
-        String value = _configDao.getValue("vmsnapshot.create.wait");
-        _wait = NumbersUtil.parseInt(value, 1800);
+        _wait = VMSnapshotCreateWait.value();
 
         return true;
     }
diff --git a/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java 
b/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
index eab371ab353..bac1d8bc205 100644
--- a/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
+++ b/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
@@ -42,11 +42,12 @@ import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 import javax.persistence.EntityExistsException;
 
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.managed.context.ManagedContextRunnable;
 import org.apache.cloudstack.quota.QuotaAlertManager;
 import org.apache.cloudstack.quota.QuotaManager;
 import org.apache.cloudstack.quota.QuotaStatement;
+import org.apache.cloudstack.quota.constant.QuotaConfig;
+import org.apache.cloudstack.usage.UsageService;
 import org.apache.cloudstack.usage.UsageTypes;
 import org.apache.cloudstack.utils.usage.UsageUtils;
 import org.apache.commons.collections.CollectionUtils;
@@ -91,7 +92,6 @@ import com.cloud.utils.db.GlobalLock;
 import com.cloud.utils.db.QueryBuilder;
 import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.TransactionLegacy;
-import com.cloud.utils.exception.CloudRuntimeException;
 
 @Component
 public class UsageManagerImpl extends ManagerBase implements UsageManager, 
Runnable {
@@ -143,8 +143,6 @@ public class UsageManagerImpl extends ManagerBase 
implements UsageManager, Runna
     @Inject
     protected UsageEventDetailsDao _usageEventDetailsDao;
     @Inject
-    ConfigurationDao _configDao;
-    @Inject
     private UsageVMSnapshotDao _usageVMSnapshotDao;
     @Inject
     private UsageVMSnapshotOnPrimaryDao _usageSnapshotOnPrimaryDao;
@@ -194,12 +192,6 @@ public class UsageManagerImpl extends ManagerBase 
implements UsageManager, Runna
     public UsageManagerImpl() {
     }
 
-    private void mergeConfigs(Map<String, String> dbParams, Map<String, 
Object> xmlParams) {
-        for (Map.Entry<String, Object> param : xmlParams.entrySet()) {
-            dbParams.put(param.getKey(), (String)param.getValue());
-        }
-    }
-
     @Override
     public boolean configure(String name, Map<String, Object> params) throws 
ConfigurationException {
         final String run = "usage.vmops.pid";
@@ -216,29 +208,15 @@ public class UsageManagerImpl extends ManagerBase 
implements UsageManager, Runna
             logger.info("Implementation Version is " + _version);
         }
 
-        Map<String, String> configs;
-        try {
-            configs = _configDao.getConfiguration(params);
-
-            if (params != null) {
-                mergeConfigs(configs, params);
-                logger.info("configs = " + configs);
-            }
-        } catch (CloudRuntimeException e) {
-            logger.error("Unhandled configuration exception: " + 
e.getMessage());
-            throw new CloudRuntimeException("Unhandled configuration 
exception", e);
-        }
-
-        String execTime = configs.get("usage.stats.job.exec.time");
-        String aggregationRange = 
configs.get("usage.stats.job.aggregation.range");
-        String execTimeZone = configs.get("usage.execution.timezone");
-        String aggregationTimeZone = configs.get("usage.aggregation.timezone");
-        String sanityCheckInterval = 
configs.get("usage.sanity.check.interval");
-        String quotaEnable = configs.get("quota.enable.service");
-        _runQuota = Boolean.valueOf(quotaEnable == null ? "false" : 
quotaEnable );
-        usageSnapshotSelection  = 
Boolean.valueOf(configs.get("usage.snapshot.virtualsize.select"));
+        String execTime = UsageService.UsageStatsJobExecTime.value();
+        Integer aggregationRange = 
UsageService.UsageStatsJobAggregationRange.value();
+        String execTimeZone = UsageService.UsageExecutionTimezone.value();
+        String aggregationTimeZone = 
UsageService.UsageAggregationTimezone.value();
+        Integer sanityCheckInterval = 
UsageService.UsageSanityCheckInterval.value();
+        _runQuota = QuotaConfig.QuotaPluginEnabled.value();
+        usageSnapshotSelection = 
UsageService.UsageSnapshotVirtualSizeSelect.value();
         if (sanityCheckInterval != null) {
-            _sanityCheckInterval = Integer.parseInt(sanityCheckInterval);
+            _sanityCheckInterval = sanityCheckInterval;
         }
 
         if (aggregationTimeZone != null && !aggregationTimeZone.isEmpty()) {
@@ -268,7 +246,7 @@ public class UsageManagerImpl extends ManagerBase 
implements UsageManager, Runna
                     usageExecutionTimeZone.getID(), execTime, 
aggregationRange, DateUtil.displayDateInTimezone(usageExecutionTimeZone, new 
Date()),
                     DateUtil.displayDateInTimezone(usageExecutionTimeZone, 
_jobExecTime.getTime()), usageAggregationTimeZone.getID());
 
-            _aggregationDuration = Integer.parseInt(aggregationRange);
+            _aggregationDuration = aggregationRange;
             if (_aggregationDuration < UsageUtils.USAGE_AGGREGATION_RANGE_MIN) 
{
                 logger.warn("Usage stats job aggregation range is to small, 
using the minimum value of " + UsageUtils.USAGE_AGGREGATION_RANGE_MIN);
                 _aggregationDuration = UsageUtils.USAGE_AGGREGATION_RANGE_MIN;

Reply via email to