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;
