mirror of https://github.com/apache/cloudstack.git
Add missing HA config keys (#3776)
This commit is contained in:
parent
005019b0e6
commit
54cc73af08
|
|
@ -16,18 +16,62 @@
|
|||
// under the License.
|
||||
package com.cloud.ha;
|
||||
|
||||
import java.util.List;
|
||||
import static org.apache.cloudstack.framework.config.ConfigKey.Scope.Cluster;
|
||||
|
||||
import com.cloud.deploy.DeploymentPlanner;
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.host.Status;
|
||||
import com.cloud.utils.component.Manager;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* HighAvailabilityManager checks to make sure the VMs are running fine.
|
||||
*/
|
||||
public interface HighAvailabilityManager extends Manager {
|
||||
|
||||
ConfigKey<Boolean> ForceHA = new ConfigKey<>("Advanced", Boolean.class, "force.ha", "false",
|
||||
"Force High-Availability to happen even if the VM says no.", true, Cluster);
|
||||
|
||||
ConfigKey<Integer> HAWorkers = new ConfigKey<>("Advanced", Integer.class, "ha.workers", "5",
|
||||
"The number of High-Availability worker threads.", true, Cluster);
|
||||
|
||||
ConfigKey<Integer> InvestigateRetryInterval = new ConfigKey<>("Advanced", Integer.class, "investigate.retry.interval",
|
||||
"60", "The time (in seconds) between VM pings when the agent is disconnected.", true, Cluster);
|
||||
|
||||
ConfigKey<Integer> MigrateRetryInterval = new ConfigKey<>("Advanced", Integer.class, "migrate.retry.interval",
|
||||
"120", "The time (in seconds) between migration retries.", true, Cluster);
|
||||
|
||||
ConfigKey<Integer> RestartRetryInterval = new ConfigKey<>("Advanced", Integer.class, "restart.retry.interval",
|
||||
"600", "The time (in seconds) between retries to restart a VM.", true, Cluster);
|
||||
|
||||
ConfigKey<Integer> StopRetryInterval = new ConfigKey<>("Advanced", Integer.class, "stop.retry.interval",
|
||||
"600", "The time in seconds between retries to stop or destroy a VM.", true, Cluster);
|
||||
|
||||
ConfigKey<Long> TimeBetweenCleanup = new ConfigKey<>("Advanced", Long.class,
|
||||
"time.between.cleanup", "86400", "The time in seconds to wait before the"
|
||||
+ " cleanup thread runs for the different HA-Worker-Threads. The cleanup thread finds all the work items "
|
||||
+ "that were successful and is now ready to be purged from the the database (table: op_ha_work).",
|
||||
true, Cluster);
|
||||
|
||||
ConfigKey<Integer> MaxRetries = new ConfigKey<>("Advanced", Integer.class, "max.retries",
|
||||
"5", "The number of times to try a restart for the different Work-Types: "
|
||||
+ "Migrating - VMs off of a host, Destroy - a VM, Stop - a VM for storage pool migration purposes,"
|
||||
+ " CheckStop - checks if a VM has been stopped, ForceStop - force a VM to stop even if the "
|
||||
+ "states don't allow it, Destroy - a VM and HA - restart a VM.", true, Cluster);
|
||||
|
||||
ConfigKey<Long> TimeToSleep = new ConfigKey<>("Advanced", Long.class, "time.to.sleep",
|
||||
"60", "The time in seconds to sleep before checking the database (table: op_ha_work) "
|
||||
+ "for new working types (Migration, Stop, CheckStop, ForceStop, Destroy and HA), if no work items are found.",
|
||||
true, Cluster);
|
||||
|
||||
ConfigKey<Long> TimeBetweenFailures = new ConfigKey<>("Advanced", Long.class,
|
||||
"time.between.failures", "3600", "The time in seconds before try to cleanup all the VMs"
|
||||
+ " which are registered for the HA event that were successful and are now ready to be purged.",
|
||||
true, Cluster);
|
||||
|
||||
public enum WorkType {
|
||||
Migration, // Migrating VMs off of a host.
|
||||
Stop, // Stops a VM for storage pool migration purposes. This should be obsolete now.
|
||||
|
|
|
|||
|
|
@ -16,15 +16,6 @@
|
|||
// under the License.
|
||||
package com.cloud.configuration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.consoleproxy.ConsoleProxyManager;
|
||||
import com.cloud.ha.HighAvailabilityManager;
|
||||
|
|
@ -38,6 +29,14 @@ import com.cloud.storage.snapshot.SnapshotManager;
|
|||
import com.cloud.template.TemplateManager;
|
||||
import com.cloud.vm.UserVmManager;
|
||||
import com.cloud.vm.snapshot.VMSnapshotManager;
|
||||
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
/**
|
||||
* @deprecated use the more dynamic ConfigKey
|
||||
|
|
@ -558,15 +557,6 @@ public enum Config {
|
|||
"The interval (in milliseconds) when host stats are retrieved from agents.",
|
||||
null),
|
||||
HostRetry("Advanced", AgentManager.class, Integer.class, "host.retry", "2", "Number of times to retry hosts for creating a volume", null),
|
||||
InvestigateRetryInterval(
|
||||
"Advanced",
|
||||
HighAvailabilityManager.class,
|
||||
Integer.class,
|
||||
"investigate.retry.interval",
|
||||
"60",
|
||||
"Time (in seconds) between VM pings when agent is disconnected",
|
||||
null),
|
||||
MigrateRetryInterval("Advanced", HighAvailabilityManager.class, Integer.class, "migrate.retry.interval", "120", "Time (in seconds) between migration retries", null),
|
||||
RouterCpuMHz(
|
||||
"Advanced",
|
||||
NetworkOrchestrationService.class,
|
||||
|
|
@ -575,14 +565,6 @@ public enum Config {
|
|||
String.valueOf(VpcVirtualNetworkApplianceManager.DEFAULT_ROUTER_CPU_MHZ),
|
||||
"Default CPU speed (MHz) for router VM.",
|
||||
null),
|
||||
RestartRetryInterval(
|
||||
"Advanced",
|
||||
HighAvailabilityManager.class,
|
||||
Integer.class,
|
||||
"restart.retry.interval",
|
||||
"600",
|
||||
"Time (in seconds) between retries to restart a vm",
|
||||
null),
|
||||
RouterStatsInterval(
|
||||
"Advanced",
|
||||
NetworkOrchestrationService.class,
|
||||
|
|
@ -624,18 +606,9 @@ public enum Config {
|
|||
"specify extra public nics used for virtual router(up to 5)",
|
||||
"0-5"),
|
||||
ScaleRetry("Advanced", ManagementServer.class, Integer.class, "scale.retry", "2", "Number of times to retry scaling up the vm", null),
|
||||
StopRetryInterval(
|
||||
"Advanced",
|
||||
HighAvailabilityManager.class,
|
||||
Integer.class,
|
||||
"stop.retry.interval",
|
||||
"600",
|
||||
"Time in seconds between retries to stop or destroy a vm",
|
||||
null),
|
||||
UpdateWait("Advanced", AgentManager.class, Integer.class, "update.wait", "600", "Time to wait (in seconds) before alerting on a updating agent", null),
|
||||
XapiWait("Advanced", AgentManager.class, Integer.class, "xapiwait", "60", "Time (in seconds) to wait for XAPI to return", null),
|
||||
MigrateWait("Advanced", AgentManager.class, Integer.class, "migratewait", "3600", "Time (in seconds) to wait for VM migrate finish", null),
|
||||
HAWorkers("Advanced", AgentManager.class, Integer.class, "ha.workers", "5", "Number of ha worker threads.", null),
|
||||
MountParent(
|
||||
"Advanced",
|
||||
ManagementServer.class,
|
||||
|
|
|
|||
|
|
@ -16,92 +16,6 @@
|
|||
// under the License.
|
||||
package com.cloud.configuration;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URLDecoder;
|
||||
import java.sql.Date;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.cloudstack.acl.SecurityChecker;
|
||||
import org.apache.cloudstack.affinity.AffinityGroup;
|
||||
import org.apache.cloudstack.affinity.AffinityGroupService;
|
||||
import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.CreateManagementNetworkIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.DeleteManagementNetworkIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.CreateDiskOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.CreateServiceOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.DeleteDiskOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.DeleteServiceOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.UpdateDiskOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.UpdateServiceOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;
|
||||
import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd;
|
||||
import org.apache.cloudstack.api.command.admin.region.CreatePortableIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.region.DeletePortableIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.region.ListPortableIpRangesCmd;
|
||||
import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
|
||||
import org.apache.cloudstack.config.Configuration;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
|
||||
import org.apache.cloudstack.framework.config.ConfigDepot;
|
||||
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.config.impl.ConfigurationVO;
|
||||
import org.apache.cloudstack.framework.messagebus.MessageBus;
|
||||
import org.apache.cloudstack.framework.messagebus.PublishScope;
|
||||
import org.apache.cloudstack.region.PortableIp;
|
||||
import org.apache.cloudstack.region.PortableIpDao;
|
||||
import org.apache.cloudstack.region.PortableIpRange;
|
||||
import org.apache.cloudstack.region.PortableIpRangeDao;
|
||||
import org.apache.cloudstack.region.PortableIpRangeVO;
|
||||
import org.apache.cloudstack.region.PortableIpVO;
|
||||
import org.apache.cloudstack.region.Region;
|
||||
import org.apache.cloudstack.region.RegionVO;
|
||||
import org.apache.cloudstack.region.dao.RegionDao;
|
||||
import org.apache.cloudstack.resourcedetail.DiskOfferingDetailVO;
|
||||
import org.apache.cloudstack.resourcedetail.dao.DiskOfferingDetailsDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
|
||||
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.alert.AlertManager;
|
||||
import com.cloud.api.ApiDBUtils;
|
||||
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
|
||||
|
|
@ -243,6 +157,91 @@ import com.google.common.base.MoreObjects;
|
|||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.Sets;
|
||||
import org.apache.cloudstack.acl.SecurityChecker;
|
||||
import org.apache.cloudstack.affinity.AffinityGroup;
|
||||
import org.apache.cloudstack.affinity.AffinityGroupService;
|
||||
import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.CreateManagementNetworkIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.DeleteManagementNetworkIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.CreateDiskOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.CreateServiceOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.DeleteDiskOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.DeleteServiceOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.UpdateDiskOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.offering.UpdateServiceOfferingCmd;
|
||||
import org.apache.cloudstack.api.command.admin.pod.DeletePodCmd;
|
||||
import org.apache.cloudstack.api.command.admin.pod.UpdatePodCmd;
|
||||
import org.apache.cloudstack.api.command.admin.region.CreatePortableIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.region.DeletePortableIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.region.ListPortableIpRangesCmd;
|
||||
import org.apache.cloudstack.api.command.admin.vlan.CreateVlanIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.vlan.DeleteVlanIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
|
||||
import org.apache.cloudstack.config.Configuration;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
|
||||
import org.apache.cloudstack.framework.config.ConfigDepot;
|
||||
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.config.impl.ConfigurationVO;
|
||||
import org.apache.cloudstack.framework.messagebus.MessageBus;
|
||||
import org.apache.cloudstack.framework.messagebus.PublishScope;
|
||||
import org.apache.cloudstack.region.PortableIp;
|
||||
import org.apache.cloudstack.region.PortableIpDao;
|
||||
import org.apache.cloudstack.region.PortableIpRange;
|
||||
import org.apache.cloudstack.region.PortableIpRangeDao;
|
||||
import org.apache.cloudstack.region.PortableIpRangeVO;
|
||||
import org.apache.cloudstack.region.PortableIpVO;
|
||||
import org.apache.cloudstack.region.Region;
|
||||
import org.apache.cloudstack.region.RegionVO;
|
||||
import org.apache.cloudstack.region.dao.RegionDao;
|
||||
import org.apache.cloudstack.resourcedetail.DiskOfferingDetailVO;
|
||||
import org.apache.cloudstack.resourcedetail.dao.DiskOfferingDetailsDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
|
||||
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URLDecoder;
|
||||
import java.sql.Date;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
public class ConfigurationManagerImpl extends ManagerBase implements ConfigurationManager, ConfigurationService, Configurable {
|
||||
public static final Logger s_logger = Logger.getLogger(ConfigurationManagerImpl.class);
|
||||
|
|
@ -416,12 +415,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||
configValuesForValidation.add("consoleproxy.capacityscan.interval");
|
||||
configValuesForValidation.add("expunge.interval");
|
||||
configValuesForValidation.add("host.stats.interval");
|
||||
configValuesForValidation.add("investigate.retry.interval");
|
||||
configValuesForValidation.add("migrate.retry.interval");
|
||||
configValuesForValidation.add("network.gc.interval");
|
||||
configValuesForValidation.add("ping.interval");
|
||||
configValuesForValidation.add("snapshot.poll.interval");
|
||||
configValuesForValidation.add("stop.retry.interval");
|
||||
configValuesForValidation.add("storage.stats.interval");
|
||||
configValuesForValidation.add("storage.cleanup.interval");
|
||||
configValuesForValidation.add("wait");
|
||||
|
|
|
|||
|
|
@ -16,30 +16,9 @@
|
|||
// under the License.
|
||||
package com.cloud.ha;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.log4j.NDC;
|
||||
import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.managed.context.ManagedContext;
|
||||
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.alert.AlertManager;
|
||||
import com.cloud.cluster.ClusterManagerListener;
|
||||
import org.apache.cloudstack.management.ManagementServerHost;
|
||||
import com.cloud.configuration.Config;
|
||||
import com.cloud.dc.ClusterDetailsDao;
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
import com.cloud.dc.HostPodVO;
|
||||
|
|
@ -68,7 +47,6 @@ import com.cloud.storage.StorageManager;
|
|||
import com.cloud.storage.dao.GuestOSCategoryDao;
|
||||
import com.cloud.storage.dao.GuestOSDao;
|
||||
import com.cloud.user.AccountManager;
|
||||
import com.cloud.utils.NumbersUtil;
|
||||
import com.cloud.utils.component.ManagerBase;
|
||||
import com.cloud.utils.concurrency.NamedThreadFactory;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
|
@ -78,6 +56,27 @@ import com.cloud.vm.VirtualMachine.State;
|
|||
import com.cloud.vm.VirtualMachineManager;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.VMInstanceDao;
|
||||
import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
|
||||
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.managed.context.ManagedContext;
|
||||
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
|
||||
import org.apache.cloudstack.management.ManagementServerHost;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.log4j.NDC;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
/**
|
||||
* HighAvailabilityManagerImpl coordinates the HA process. VMs are registered with the HA Manager for HA. The request is stored
|
||||
|
|
@ -101,7 +100,9 @@ import com.cloud.vm.dao.VMInstanceDao;
|
|||
* ha.retry.wait | time to wait before retrying the work item | seconds | 120 || || stop.retry.wait | time to wait
|
||||
* before retrying the stop | seconds | 120 || * }
|
||||
**/
|
||||
public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvailabilityManager, ClusterManagerListener {
|
||||
public class HighAvailabilityManagerImpl extends ManagerBase implements Configurable, HighAvailabilityManager, ClusterManagerListener {
|
||||
|
||||
private static final int SECONDS_TO_MILLISECONDS_FACTOR = 1000;
|
||||
|
||||
protected static final Logger s_logger = Logger.getLogger(HighAvailabilityManagerImpl.class);
|
||||
WorkerThread[] _workers;
|
||||
|
|
@ -831,42 +832,24 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
|
|||
public boolean configure(final String name, final Map<String, Object> xmlParams) throws ConfigurationException {
|
||||
_serverId = _msServer.getId();
|
||||
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
params = _configDao.getConfiguration(Long.toHexString(_serverId), xmlParams);
|
||||
final Map<String, String> params = _configDao.getConfiguration(Long.toHexString(_serverId),
|
||||
xmlParams);
|
||||
|
||||
String value = params.get(Config.HAWorkers.key());
|
||||
final int count = NumbersUtil.parseInt(value, 1);
|
||||
final int count = HAWorkers.value();
|
||||
_workers = new WorkerThread[count];
|
||||
for (int i = 0; i < _workers.length; i++) {
|
||||
_workers[i] = new WorkerThread("HA-Worker-" + i);
|
||||
}
|
||||
|
||||
value = params.get("force.ha");
|
||||
_forceHA = Boolean.parseBoolean(value);
|
||||
|
||||
value = params.get("time.to.sleep");
|
||||
_timeToSleep = (long)NumbersUtil.parseInt(value, 60) * 1000;
|
||||
|
||||
value = params.get("max.retries");
|
||||
_maxRetries = NumbersUtil.parseInt(value, 5);
|
||||
|
||||
value = params.get("time.between.failures");
|
||||
_timeBetweenFailures = NumbersUtil.parseLong(value, 3600) * 1000;
|
||||
|
||||
value = params.get("time.between.cleanup");
|
||||
_timeBetweenCleanups = NumbersUtil.parseLong(value, 3600 * 24);
|
||||
|
||||
value = params.get("stop.retry.interval");
|
||||
_stopRetryInterval = NumbersUtil.parseInt(value, 10 * 60);
|
||||
|
||||
value = params.get("restart.retry.interval");
|
||||
_restartRetryInterval = NumbersUtil.parseInt(value, 10 * 60);
|
||||
|
||||
value = params.get("investigate.retry.interval");
|
||||
_investigateRetryInterval = NumbersUtil.parseInt(value, 1 * 60);
|
||||
|
||||
value = params.get("migrate.retry.interval");
|
||||
_migrateRetryInterval = NumbersUtil.parseInt(value, 2 * 60);
|
||||
_forceHA = ForceHA.value();
|
||||
_timeToSleep = TimeToSleep.value() * SECONDS_TO_MILLISECONDS_FACTOR;
|
||||
_maxRetries = MaxRetries.value();
|
||||
_timeBetweenFailures = TimeBetweenFailures.value() * SECONDS_TO_MILLISECONDS_FACTOR;
|
||||
_timeBetweenCleanups = TimeBetweenCleanup.value();
|
||||
_stopRetryInterval = StopRetryInterval.value();
|
||||
_restartRetryInterval = RestartRetryInterval.value();
|
||||
_investigateRetryInterval = InvestigateRetryInterval.value();
|
||||
_migrateRetryInterval = MigrateRetryInterval.value();
|
||||
|
||||
_instance = params.get("instance");
|
||||
if (_instance == null) {
|
||||
|
|
@ -1004,4 +987,24 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai
|
|||
List<HaWorkVO> haWorks = _haDao.listPendingHaWorkForVm(vmId);
|
||||
return haWorks.size() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The name of the component that provided this configuration
|
||||
* variable. This value is saved in the database so someone can easily
|
||||
* identify who provides this variable.
|
||||
**/
|
||||
@Override
|
||||
public String getConfigComponentName() {
|
||||
return HighAvailabilityManager.class.getSimpleName();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The list of config keys provided by this configuable.
|
||||
*/
|
||||
@Override
|
||||
public ConfigKey<?>[] getConfigKeys() {
|
||||
return new ConfigKey[] {TimeBetweenCleanup, MaxRetries, TimeToSleep, TimeBetweenFailures,
|
||||
StopRetryInterval, RestartRetryInterval, MigrateRetryInterval, InvestigateRetryInterval,
|
||||
HAWorkers, ForceHA};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,31 @@
|
|||
// under the License.
|
||||
package com.cloud.test;
|
||||
|
||||
import com.cloud.host.Status;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.service.dao.ServiceOfferingDaoImpl;
|
||||
import com.cloud.storage.DiskOfferingVO;
|
||||
import com.cloud.storage.Storage.ProvisioningType;
|
||||
import com.cloud.storage.dao.DiskOfferingDaoImpl;
|
||||
import com.cloud.utils.DateUtil;
|
||||
import com.cloud.utils.PropertiesUtil;
|
||||
import com.cloud.utils.component.ComponentContext;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.TransactionCallbackWithExceptionNoReturn;
|
||||
import com.cloud.utils.db.TransactionLegacy;
|
||||
import com.cloud.utils.db.TransactionStatus;
|
||||
import com.cloud.utils.net.NfsUtils;
|
||||
import org.apache.cloudstack.utils.security.DigestHelper;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.log4j.xml.DOMConfigurator;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.helpers.DefaultHandler;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
|
|
@ -37,32 +62,6 @@ import javax.xml.parsers.ParserConfigurationException;
|
|||
import javax.xml.parsers.SAXParser;
|
||||
import javax.xml.parsers.SAXParserFactory;
|
||||
|
||||
import org.apache.cloudstack.utils.security.DigestHelper;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.log4j.xml.DOMConfigurator;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.helpers.DefaultHandler;
|
||||
|
||||
import com.cloud.host.Status;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.service.dao.ServiceOfferingDaoImpl;
|
||||
import com.cloud.storage.DiskOfferingVO;
|
||||
import com.cloud.storage.Storage.ProvisioningType;
|
||||
import com.cloud.storage.dao.DiskOfferingDaoImpl;
|
||||
import com.cloud.utils.DateUtil;
|
||||
import com.cloud.utils.PropertiesUtil;
|
||||
import com.cloud.utils.component.ComponentContext;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.TransactionCallbackWithExceptionNoReturn;
|
||||
import com.cloud.utils.db.TransactionLegacy;
|
||||
import com.cloud.utils.db.TransactionStatus;
|
||||
import com.cloud.utils.net.NfsUtils;
|
||||
|
||||
public class DatabaseConfig {
|
||||
private static final Logger s_logger = Logger.getLogger(DatabaseConfig.class.getName());
|
||||
|
||||
|
|
@ -288,10 +287,6 @@ public class DatabaseConfig {
|
|||
s_configurationComponents.put("consoleproxy.session.timeout", "AgentManager");
|
||||
s_configurationComponents.put("expunge.workers", "UserVmManager");
|
||||
s_configurationComponents.put("extract.url.cleanup.interval", "management-server");
|
||||
s_configurationComponents.put("stop.retry.interval", "HighAvailabilityManager");
|
||||
s_configurationComponents.put("restart.retry.interval", "HighAvailabilityManager");
|
||||
s_configurationComponents.put("investigate.retry.interval", "HighAvailabilityManager");
|
||||
s_configurationComponents.put("migrate.retry.interval", "HighAvailabilityManager");
|
||||
s_configurationComponents.put("storage.overwrite.provisioning", "UserVmManager");
|
||||
s_configurationComponents.put("init", "none");
|
||||
s_configurationComponents.put("system.vm.use.local.storage", "ManagementServer");
|
||||
|
|
@ -345,10 +340,6 @@ public class DatabaseConfig {
|
|||
s_defaultConfigurationValues.put("extract.url.cleanup.interval", "120");
|
||||
s_defaultConfigurationValues.put("instance.name", "VM");
|
||||
s_defaultConfigurationValues.put("expunge.workers", "1");
|
||||
s_defaultConfigurationValues.put("stop.retry.interval", "600");
|
||||
s_defaultConfigurationValues.put("restart.retry.interval", "600");
|
||||
s_defaultConfigurationValues.put("investigate.retry.interval", "60");
|
||||
s_defaultConfigurationValues.put("migrate.retry.interval", "120");
|
||||
s_defaultConfigurationValues.put("event.purge.interval", "86400");
|
||||
s_defaultConfigurationValues.put("account.cleanup.interval", "86400");
|
||||
s_defaultConfigurationValues.put("system.vm.use.local.storage", "false");
|
||||
|
|
|
|||
Loading…
Reference in New Issue