mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	server: event for HA vm start (#9202)
This commit is contained in:
		
							parent
							
								
									7a8066d3ca
								
							
						
					
					
						commit
						b22315db85
					
				| @ -17,17 +17,22 @@ | ||||
| package com.cloud.network; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; | ||||
| import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd; | ||||
| 
 | ||||
| import com.cloud.deploy.DeploymentPlanner; | ||||
| import com.cloud.exception.ConcurrentOperationException; | ||||
| import com.cloud.exception.InsufficientCapacityException; | ||||
| import com.cloud.exception.OperationTimedoutException; | ||||
| import com.cloud.exception.ResourceUnavailableException; | ||||
| import com.cloud.network.router.VirtualRouter; | ||||
| import com.cloud.user.Account; | ||||
| import com.cloud.utils.Pair; | ||||
| import com.cloud.vm.Nic; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.cloud.vm.VirtualMachineProfile; | ||||
| 
 | ||||
| public interface VirtualNetworkApplianceService { | ||||
|     /** | ||||
| @ -62,6 +67,10 @@ public interface VirtualNetworkApplianceService { | ||||
| 
 | ||||
|     VirtualRouter startRouter(long id) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException; | ||||
| 
 | ||||
|     void startRouterForHA(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlanner planner) | ||||
|             throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, | ||||
|             OperationTimedoutException; | ||||
| 
 | ||||
|     VirtualRouter destroyRouter(long routerId, Account caller, Long callerUserId) throws ResourceUnavailableException, ConcurrentOperationException; | ||||
| 
 | ||||
|     VirtualRouter findRouter(long routerId); | ||||
|  | ||||
| @ -42,6 +42,7 @@ import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd; | ||||
| import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; | ||||
| 
 | ||||
| import com.cloud.dc.DataCenter; | ||||
| import com.cloud.deploy.DeploymentPlanner; | ||||
| import com.cloud.exception.ConcurrentOperationException; | ||||
| import com.cloud.exception.InsufficientCapacityException; | ||||
| import com.cloud.exception.ManagementServerException; | ||||
| @ -113,6 +114,10 @@ public interface UserVmService { | ||||
| 
 | ||||
|     void startVirtualMachine(UserVm vm) throws OperationTimedoutException, ResourceUnavailableException, InsufficientCapacityException; | ||||
| 
 | ||||
|     void startVirtualMachineForHA(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, | ||||
|           DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, | ||||
|             ConcurrentOperationException, OperationTimedoutException; | ||||
| 
 | ||||
|     UserVm rebootVirtualMachine(RebootVMCmd cmd) throws InsufficientCapacityException, ResourceUnavailableException; | ||||
| 
 | ||||
|     UserVm updateVirtualMachine(UpdateVMCmd cmd) throws ResourceUnavailableException, InsufficientCapacityException; | ||||
|  | ||||
| @ -4802,6 +4802,18 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private ApiCommandResourceType getApiCommandResourceTypeForVm(VirtualMachine vm) { | ||||
|         switch (vm.getType()) { | ||||
|             case DomainRouter: | ||||
|                 return ApiCommandResourceType.DomainRouter; | ||||
|             case ConsoleProxy: | ||||
|                 return ApiCommandResourceType.ConsoleProxy; | ||||
|             case SecondaryStorageVm: | ||||
|                 return ApiCommandResourceType.SystemVm; | ||||
|         } | ||||
|         return ApiCommandResourceType.VirtualMachine; | ||||
|     } | ||||
| 
 | ||||
|     private void handlePowerOnReportWithNoPendingJobsOnVM(final VMInstanceVO vm) { | ||||
|         Host host = _hostDao.findById(vm.getHostId()); | ||||
|         Host poweredHost = _hostDao.findById(vm.getPowerHostId()); | ||||
| @ -4849,7 +4861,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac | ||||
|                     + " -> Running) from out-of-context transition. VM network environment may need to be reset"); | ||||
| 
 | ||||
|             ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, vm.getDomainId(), | ||||
|                     EventTypes.EVENT_VM_START, "Out of band VM power on", vm.getId(), ApiCommandResourceType.VirtualMachine.toString()); | ||||
|                     EventTypes.EVENT_VM_START, "Out of band VM power on", vm.getId(), getApiCommandResourceTypeForVm(vm).toString()); | ||||
|             s_logger.info("VM " + vm.getInstanceName() + " is sync-ed to at Running state according to power-on report from hypervisor"); | ||||
|             break; | ||||
| 
 | ||||
| @ -4884,7 +4896,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac | ||||
|         case Running: | ||||
|         case Stopped: | ||||
|             ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM,vm.getDomainId(), | ||||
|                     EventTypes.EVENT_VM_STOP, "Out of band VM power off", vm.getId(), ApiCommandResourceType.VirtualMachine.toString()); | ||||
|                     EventTypes.EVENT_VM_STOP, "Out of band VM power off", vm.getId(), getApiCommandResourceTypeForVm(vm).toString()); | ||||
|         case Migrating: | ||||
|             if (s_logger.isInfoEnabled()) { | ||||
|                 s_logger.info( | ||||
|  | ||||
| @ -22,16 +22,16 @@ import javax.inject.Inject; | ||||
| import javax.naming.ConfigurationException; | ||||
| 
 | ||||
| import org.apache.cloudstack.consoleproxy.ConsoleAccessManager; | ||||
| import org.apache.log4j.Logger; | ||||
| 
 | ||||
| import org.apache.cloudstack.framework.config.dao.ConfigurationDao; | ||||
| import org.apache.cloudstack.framework.security.keys.KeysManager; | ||||
| import org.apache.cloudstack.framework.security.keystore.KeystoreManager; | ||||
| import org.apache.log4j.Logger; | ||||
| 
 | ||||
| import com.cloud.agent.AgentManager; | ||||
| import com.cloud.agent.api.GetVncPortAnswer; | ||||
| import com.cloud.agent.api.GetVncPortCommand; | ||||
| import com.cloud.agent.api.StartupProxyCommand; | ||||
| import com.cloud.deploy.DeploymentPlanner; | ||||
| import com.cloud.host.HostVO; | ||||
| import com.cloud.host.dao.HostDao; | ||||
| import com.cloud.info.ConsoleProxyInfo; | ||||
| @ -41,7 +41,9 @@ import com.cloud.utils.component.ManagerBase; | ||||
| import com.cloud.vm.ConsoleProxyVO; | ||||
| import com.cloud.vm.UserVmVO; | ||||
| import com.cloud.vm.VMInstanceVO; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.cloud.vm.VirtualMachineManager; | ||||
| import com.cloud.vm.VirtualMachineProfile; | ||||
| import com.cloud.vm.dao.ConsoleProxyDao; | ||||
| import com.cloud.vm.dao.UserVmDao; | ||||
| import com.cloud.vm.dao.VMInstanceDao; | ||||
| @ -182,6 +184,11 @@ public class AgentBasedConsoleProxyManager extends ManagerBase implements Consol | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void startProxyForHA(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, | ||||
|             DeploymentPlanner planner) { | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean destroyProxy(long proxyVmId) { | ||||
|         return false; | ||||
|  | ||||
| @ -16,11 +16,20 @@ | ||||
| // under the License. | ||||
| package com.cloud.consoleproxy; | ||||
| 
 | ||||
| import com.cloud.utils.component.Manager; | ||||
| import com.cloud.vm.ConsoleProxyVO; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| import org.apache.cloudstack.framework.config.ConfigKey; | ||||
| 
 | ||||
| import com.cloud.deploy.DeploymentPlanner; | ||||
| import com.cloud.exception.ConcurrentOperationException; | ||||
| import com.cloud.exception.InsufficientCapacityException; | ||||
| import com.cloud.exception.OperationTimedoutException; | ||||
| import com.cloud.exception.ResourceUnavailableException; | ||||
| import com.cloud.utils.component.Manager; | ||||
| import com.cloud.vm.ConsoleProxyVO; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.cloud.vm.VirtualMachineProfile; | ||||
| 
 | ||||
| public interface ConsoleProxyManager extends Manager, ConsoleProxyService { | ||||
| 
 | ||||
|     int DEFAULT_PROXY_CAPACITY = 50; | ||||
| @ -53,6 +62,10 @@ public interface ConsoleProxyManager extends Manager, ConsoleProxyService { | ||||
| 
 | ||||
|     ConsoleProxyVO startProxy(long proxyVmId, boolean ignoreRestartSetting); | ||||
| 
 | ||||
|     void startProxyForHA(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlanner planner) | ||||
|             throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, | ||||
|             OperationTimedoutException; | ||||
| 
 | ||||
|     boolean stopProxy(long proxyVmId); | ||||
| 
 | ||||
|     boolean rebootProxy(long proxyVmId); | ||||
|  | ||||
| @ -75,6 +75,9 @@ import com.cloud.dc.dao.DataCenterDao; | ||||
| import com.cloud.dc.dao.HostPodDao; | ||||
| import com.cloud.deploy.DataCenterDeployment; | ||||
| import com.cloud.deploy.DeployDestination; | ||||
| import com.cloud.deploy.DeploymentPlanner; | ||||
| import com.cloud.event.ActionEvent; | ||||
| import com.cloud.event.EventTypes; | ||||
| import com.cloud.exception.ConcurrentOperationException; | ||||
| import com.cloud.exception.InsufficientAddressCapacityException; | ||||
| import com.cloud.exception.InsufficientCapacityException; | ||||
| @ -493,6 +496,14 @@ public class ConsoleProxyManagerImpl extends ManagerBase implements ConsoleProxy | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     @ActionEvent(eventType = EventTypes.EVENT_PROXY_START, eventDescription = "restarting console proxy VM for HA", async = true) | ||||
|     public void startProxyForHA(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, | ||||
|             DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, | ||||
|             ConcurrentOperationException, OperationTimedoutException { | ||||
|         virtualMachineManager.advanceStart(vm.getUuid(), params, planner); | ||||
|     } | ||||
| 
 | ||||
|     public ConsoleProxyVO assignProxyFromRunningPool(long dataCenterId) { | ||||
| 
 | ||||
|         if (s_logger.isDebugEnabled()) { | ||||
|  | ||||
| @ -28,6 +28,8 @@ import java.util.concurrent.TimeUnit; | ||||
| import javax.inject.Inject; | ||||
| import javax.naming.ConfigurationException; | ||||
| 
 | ||||
| import org.apache.cloudstack.api.ApiCommandResourceType; | ||||
| import org.apache.cloudstack.context.CallContext; | ||||
| import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService; | ||||
| import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver; | ||||
| import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; | ||||
| @ -66,13 +68,14 @@ import com.cloud.host.HostVO; | ||||
| import com.cloud.host.Status; | ||||
| import com.cloud.host.dao.HostDao; | ||||
| import com.cloud.hypervisor.Hypervisor.HypervisorType; | ||||
| import com.cloud.network.VpcVirtualNetworkApplianceService; | ||||
| import com.cloud.resource.ResourceManager; | ||||
| import com.cloud.server.ManagementServer; | ||||
| import com.cloud.service.ServiceOfferingVO; | ||||
| import com.cloud.service.dao.ServiceOfferingDao; | ||||
| import com.cloud.storage.Storage.StoragePoolType; | ||||
| import com.cloud.storage.StorageManager; | ||||
| import com.cloud.storage.VolumeVO; | ||||
| import com.cloud.storage.Storage.StoragePoolType; | ||||
| import com.cloud.storage.dao.GuestOSCategoryDao; | ||||
| import com.cloud.storage.dao.GuestOSDao; | ||||
| import com.cloud.storage.dao.VolumeDao; | ||||
| @ -81,6 +84,7 @@ import com.cloud.user.AccountManager; | ||||
| import com.cloud.utils.component.ManagerBase; | ||||
| import com.cloud.utils.concurrency.NamedThreadFactory; | ||||
| import com.cloud.utils.exception.CloudRuntimeException; | ||||
| import com.cloud.vm.UserVmManager; | ||||
| import com.cloud.vm.VMInstanceVO; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.cloud.vm.VirtualMachineManager; | ||||
| @ -144,6 +148,10 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements Configur | ||||
|     VolumeDao volumeDao; | ||||
|     @Inject | ||||
|     DataStoreProviderManager dataStoreProviderMgr; | ||||
|     @Inject | ||||
|     VpcVirtualNetworkApplianceService routerService; | ||||
|     @Inject | ||||
|     UserVmManager userVmManager; | ||||
| 
 | ||||
|     long _serverId; | ||||
| 
 | ||||
| @ -437,6 +445,36 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements Configur | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     private void startVm(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, | ||||
|            DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, | ||||
|             ConcurrentOperationException, OperationTimedoutException { | ||||
|         CallContext ctx = CallContext.register(CallContext.current(), ApiCommandResourceType.VirtualMachine); | ||||
|         ctx.setEventResourceId(vm.getId()); | ||||
|         try { | ||||
|             switch (vm.getType()) { | ||||
|                 case DomainRouter: | ||||
|                     ctx.setEventResourceType(ApiCommandResourceType.DomainRouter); | ||||
|                     routerService.startRouterForHA(vm, params, planner); | ||||
|                     break; | ||||
|                 case ConsoleProxy: | ||||
|                     ctx.setEventResourceType(ApiCommandResourceType.ConsoleProxy); | ||||
|                     consoleProxyManager.startProxyForHA(vm, params, planner); | ||||
|                     break; | ||||
|                 case SecondaryStorageVm: | ||||
|                     ctx.setEventResourceType(ApiCommandResourceType.SystemVm); | ||||
|                     secondaryStorageVmManager.startSecStorageVmForHA(vm, params, planner); | ||||
|                     break; | ||||
|                 case User: | ||||
|                     userVmManager.startVirtualMachineForHA(vm, params, planner); | ||||
|                     break; | ||||
|                 default: | ||||
|                     _itMgr.advanceStart(vm.getUuid(), params, planner); | ||||
|             } | ||||
|         } finally { | ||||
|             CallContext.unregister(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     protected Long restart(final HaWorkVO work) { | ||||
|         s_logger.debug("RESTART with HAWORK"); | ||||
|         List<HaWorkVO> items = _haDao.listFutureHaWorkForVm(work.getInstanceId(), work.getId()); | ||||
| @ -628,10 +666,10 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements Configur | ||||
|                     } | ||||
|                 } | ||||
|                 // First try starting the vm with its original planner, if it doesn't succeed send HAPlanner as its an emergency. | ||||
|                 _itMgr.advanceStart(vm.getUuid(), params, null); | ||||
|                 startVm(vm, params, null); | ||||
|             } catch (InsufficientCapacityException e){ | ||||
|                 s_logger.warn("Failed to deploy vm " + vmId + " with original planner, sending HAPlanner"); | ||||
|                 _itMgr.advanceStart(vm.getUuid(), params, _haPlanners.get(0)); | ||||
|                 startVm(vm, params, _haPlanners.get(0)); | ||||
|             } | ||||
| 
 | ||||
|             VMInstanceVO started = _instanceDao.findById(vm.getId()); | ||||
| @ -653,7 +691,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements Configur | ||||
|         } catch (final ResourceUnavailableException e) { | ||||
|             s_logger.warn("Unable to restart " + vm.toString() + " due to " + e.getMessage()); | ||||
|             _alertMgr.sendAlert(alertType, vm.getDataCenterId(), vm.getPodIdToDeployIn(), "Unable to restart " + vm.getHostName() + " which was running on host " + | ||||
|                 hostDesc, "The Storage is unavailable for trying to restart VM, name: " + vm.getHostName() + ", id: " + vmId + " which was running on host " + hostDesc); | ||||
|                 hostDesc, "The resource is unavailable for trying to restart VM, name: " + vm.getHostName() + ", id: " + vmId + " which was running on host " + hostDesc); | ||||
|         } catch (ConcurrentOperationException e) { | ||||
|             s_logger.warn("Unable to restart " + vm.toString() + " due to " + e.getMessage()); | ||||
|             _alertMgr.sendAlert(alertType, vm.getDataCenterId(), vm.getPodIdToDeployIn(), "Unable to restart " + vm.getHostName() + " which was running on host " + | ||||
| @ -661,7 +699,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements Configur | ||||
|         } catch (OperationTimedoutException e) { | ||||
|             s_logger.warn("Unable to restart " + vm.toString() + " due to " + e.getMessage()); | ||||
|             _alertMgr.sendAlert(alertType, vm.getDataCenterId(), vm.getPodIdToDeployIn(), "Unable to restart " + vm.getHostName() + " which was running on host " + | ||||
|                 hostDesc, "The Storage is unavailable for trying to restart VM, name: " + vm.getHostName() + ", id: " + vmId + " which was running on host " + hostDesc); | ||||
|                     hostDesc, "The operation timed out while trying to restart VM, name: " + vm.getHostName() + ", id: " + vmId + " which was running on host " + hostDesc); | ||||
|         } | ||||
|         vm = _itMgr.findById(vm.getId()); | ||||
|         work.setUpdateTime(vm.getUpdated()); | ||||
|  | ||||
| @ -123,6 +123,7 @@ import com.cloud.dc.dao.DataCenterDao; | ||||
| import com.cloud.dc.dao.HostPodDao; | ||||
| import com.cloud.dc.dao.VlanDao; | ||||
| import com.cloud.deploy.DeployDestination; | ||||
| import com.cloud.deploy.DeploymentPlanner; | ||||
| import com.cloud.domain.Domain; | ||||
| import com.cloud.event.ActionEvent; | ||||
| import com.cloud.event.ActionEventUtils; | ||||
| @ -3010,6 +3011,14 @@ Configurable, StateListener<VirtualMachine.State, VirtualMachine.Event, VirtualM | ||||
|         return virtualRouter; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     @ActionEvent(eventType = EventTypes.EVENT_ROUTER_START, eventDescription = "restarting router VM for HA", async = true) | ||||
|     public void startRouterForHA(VirtualMachine vm, Map<Param, Object> params, DeploymentPlanner planner) | ||||
|             throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, | ||||
|             OperationTimedoutException { | ||||
|         _itMgr.advanceStart(vm.getUuid(), params, planner); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public List<VirtualRouter> getRoutersForNetwork(final long networkId) { | ||||
|         final List<DomainRouterVO> routers = _routerDao.findByNetwork(networkId); | ||||
|  | ||||
| @ -17,16 +17,24 @@ | ||||
| package com.cloud.storage.secondary; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| import org.apache.cloudstack.framework.config.ConfigKey; | ||||
| 
 | ||||
| import com.cloud.agent.api.Command; | ||||
| import com.cloud.agent.api.StartupCommand; | ||||
| import com.cloud.deploy.DeploymentPlanner; | ||||
| import com.cloud.exception.ConcurrentOperationException; | ||||
| import com.cloud.exception.InsufficientCapacityException; | ||||
| import com.cloud.exception.OperationTimedoutException; | ||||
| import com.cloud.exception.ResourceUnavailableException; | ||||
| import com.cloud.host.HostVO; | ||||
| import com.cloud.utils.Pair; | ||||
| import com.cloud.utils.component.Manager; | ||||
| import com.cloud.vm.SecondaryStorageVm; | ||||
| import com.cloud.vm.SecondaryStorageVmVO; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.cloud.vm.VirtualMachineProfile; | ||||
| 
 | ||||
| public interface SecondaryStorageVmManager extends Manager { | ||||
| 
 | ||||
| @ -47,6 +55,10 @@ public interface SecondaryStorageVmManager extends Manager { | ||||
| 
 | ||||
|     public SecondaryStorageVmVO startSecStorageVm(long ssVmVmId); | ||||
| 
 | ||||
|     void startSecStorageVmForHA(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, | ||||
|             DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, | ||||
|             ConcurrentOperationException, OperationTimedoutException; | ||||
| 
 | ||||
|     public boolean stopSecStorageVm(long ssVmVmId); | ||||
| 
 | ||||
|     public boolean rebootSecStorageVm(long ssVmVmId); | ||||
|  | ||||
| @ -3230,6 +3230,14 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir | ||||
|         _itMgr.advanceStart(vm.getUuid(), null, null); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     @ActionEvent(eventType = EventTypes.EVENT_VM_START, eventDescription = "restarting VM for HA", async = true) | ||||
|     public void startVirtualMachineForHA(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, | ||||
|            DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, | ||||
|             ConcurrentOperationException, OperationTimedoutException { | ||||
|         _itMgr.advanceStart(vm.getUuid(), params, planner); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     @ActionEvent(eventType = EventTypes.EVENT_VM_REBOOT, eventDescription = "rebooting Vm", async = true) | ||||
|     public UserVm rebootVirtualMachine(RebootVMCmd cmd) throws InsufficientCapacityException, ResourceUnavailableException { | ||||
|  | ||||
| @ -59,6 +59,7 @@ import com.cloud.host.HostVO; | ||||
| import com.cloud.host.Status; | ||||
| import com.cloud.host.dao.HostDao; | ||||
| import com.cloud.hypervisor.Hypervisor.HypervisorType; | ||||
| import com.cloud.network.VpcVirtualNetworkApplianceService; | ||||
| import com.cloud.resource.ResourceManager; | ||||
| import com.cloud.server.ManagementServer; | ||||
| import com.cloud.service.ServiceOfferingVO; | ||||
| @ -69,6 +70,7 @@ import com.cloud.storage.dao.GuestOSDao; | ||||
| import com.cloud.storage.dao.VolumeDao; | ||||
| import com.cloud.storage.secondary.SecondaryStorageVmManager; | ||||
| import com.cloud.user.AccountManager; | ||||
| import com.cloud.vm.UserVmManager; | ||||
| import com.cloud.vm.VMInstanceVO; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.cloud.vm.VirtualMachineManager; | ||||
| @ -125,6 +127,10 @@ public class HighAvailabilityManagerImplTest { | ||||
|     VolumeDao volumeDao; | ||||
|     @Mock | ||||
|     DataStoreProviderManager dataStoreProviderMgr; | ||||
|     @Mock | ||||
|     VpcVirtualNetworkApplianceService routerService; | ||||
|     @Mock | ||||
|     UserVmManager userVmManager; | ||||
| 
 | ||||
|     HighAvailabilityManagerImpl highAvailabilityManager; | ||||
|     HighAvailabilityManagerImpl highAvailabilityManagerSpy; | ||||
|  | ||||
| @ -17,9 +17,20 @@ | ||||
| 
 | ||||
| package com.cloud.vpc; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| import javax.naming.ConfigurationException; | ||||
| 
 | ||||
| import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; | ||||
| import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd; | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| import com.cloud.deploy.DeploymentPlanner; | ||||
| import com.cloud.exception.AgentUnavailableException; | ||||
| import com.cloud.exception.ConcurrentOperationException; | ||||
| import com.cloud.exception.InsufficientCapacityException; | ||||
| import com.cloud.exception.OperationTimedoutException; | ||||
| import com.cloud.exception.ResourceUnavailableException; | ||||
| import com.cloud.network.Network; | ||||
| import com.cloud.network.RemoteAccessVpn; | ||||
| @ -34,14 +45,8 @@ import com.cloud.utils.Pair; | ||||
| import com.cloud.utils.component.ManagerBase; | ||||
| import com.cloud.vm.DomainRouterVO; | ||||
| import com.cloud.vm.Nic; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.cloud.vm.VirtualMachineProfile; | ||||
| import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; | ||||
| import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd; | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| import javax.naming.ConfigurationException; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| @Component | ||||
| public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implements VpcVirtualNetworkApplianceManager, VpcVirtualNetworkApplianceService { | ||||
| @ -141,6 +146,13 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void startRouterForHA(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, | ||||
|          DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, | ||||
|             ConcurrentOperationException, OperationTimedoutException { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     /* (non-Javadoc) | ||||
|      * @see com.cloud.network.VirtualNetworkApplianceService#destroyRouter(long, com.cloud.user.Account, java.lang.Long) | ||||
|      */ | ||||
|  | ||||
| @ -80,6 +80,9 @@ import com.cloud.dc.DataCenterVO; | ||||
| import com.cloud.dc.dao.DataCenterDao; | ||||
| import com.cloud.deploy.DataCenterDeployment; | ||||
| import com.cloud.deploy.DeployDestination; | ||||
| import com.cloud.deploy.DeploymentPlanner; | ||||
| import com.cloud.event.ActionEvent; | ||||
| import com.cloud.event.EventTypes; | ||||
| import com.cloud.exception.ConcurrentOperationException; | ||||
| import com.cloud.exception.InsufficientAddressCapacityException; | ||||
| import com.cloud.exception.InsufficientCapacityException; | ||||
| @ -285,6 +288,14 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     @ActionEvent(eventType = EventTypes.EVENT_SSVM_START, eventDescription = "restarting secondary storage VM for HA", async = true) | ||||
|     public void startSecStorageVmForHA(VirtualMachine vm, Map<VirtualMachineProfile.Param, Object> params, | ||||
|            DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, | ||||
|             ConcurrentOperationException, OperationTimedoutException { | ||||
|         _itMgr.advanceStart(vm.getUuid(), params, planner); | ||||
|     } | ||||
| 
 | ||||
|     SecondaryStorageVmVO getSSVMfromHost(HostVO ssAHost) { | ||||
|         if (ssAHost.getType() == Host.Type.SecondaryStorageVM) { | ||||
|             return _secStorageVmDao.findByInstanceName(ssAHost.getName()); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user