From bc051cb479ea8e5d2958f450909691a699fa9dff Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Mon, 10 Jun 2024 18:29:04 +0530 Subject: [PATCH 01/10] server: event for HA vm start Fixes #8021 Signed-off-by: Abhishek Kumar --- .../java/com/cloud/vm/VirtualMachineManager.java | 3 +++ .../java/com/cloud/vm/VirtualMachineManagerImpl.java | 9 +++++++++ .../com/cloud/ha/HighAvailabilityManagerImpl.java | 12 ++++-------- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java b/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java index 3f7d6be6d889..1867a6482adc 100644 --- a/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java +++ b/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java @@ -130,6 +130,9 @@ void allocate(String vmInstanceName, VirtualMachineTemplate template, ServiceOff boolean stateTransitTo(VirtualMachine vm, VirtualMachine.Event e, Long hostId) throws NoTransitionException; + void startForHA(String vmUuid, Map params, DeploymentPlanner planner) + throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; + void advanceStart(String vmUuid, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException; diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java index 243613907ff4..bc6219b0e592 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -47,6 +47,7 @@ import javax.naming.ConfigurationException; import javax.persistence.EntityExistsException; +import com.cloud.event.ActionEvent; import com.cloud.event.ActionEventUtils; import com.google.gson.Gson; import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; @@ -988,6 +989,14 @@ protected boolean areAffinityGroupsAssociated(final VirtualMachineProfile vmProf return vmGroupCount > 0; } + @Override + @ActionEvent(eventType = EventTypes.EVENT_VM_START, eventDescription = "Restarting VM for HA") + public void startForHA(String vmUuid, Map params, + DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, + ConcurrentOperationException { + advanceStart(vmUuid, params, planner); + } + @Override public void advanceStart(final String vmUuid, final Map params, final DeploymentPlanner planner) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { diff --git a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java index f22bcde9e84e..c68397566c64 100644 --- a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -628,10 +628,10 @@ protected Long restart(final HaWorkVO work) { } } // 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); - }catch (InsufficientCapacityException e){ + _itMgr.startForHA(vm.getUuid(), 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)); + _itMgr.startForHA(vm.getUuid(), params, _haPlanners.get(0)); } VMInstanceVO started = _instanceDao.findById(vm.getId()); @@ -653,15 +653,11 @@ protected Long restart(final HaWorkVO work) { } 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 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 " + hostDesc, "The Storage is unavailable for trying to restart VM, name: " + vm.getHostName() + ", id: " + vmId + " which was running on host " + hostDesc); - } 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); } vm = _itMgr.findById(vm.getId()); work.setUpdateTime(vm.getUpdated()); From 7cad1360366211a39d6505a4506340556e3e9dc7 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 12 Jun 2024 16:54:27 +0530 Subject: [PATCH 02/10] changes for different vm types Signed-off-by: Abhishek Kumar --- .../VirtualNetworkApplianceService.java | 8 ++++ .../main/java/com/cloud/vm/UserVmService.java | 6 +++ .../AgentBasedConsoleProxyManager.java | 10 ++++- .../consoleproxy/ConsoleProxyManager.java | 16 +++++++- .../consoleproxy/ConsoleProxyManagerImpl.java | 11 ++++++ .../cloud/ha/HighAvailabilityManagerImpl.java | 37 +++++++++++++++++-- .../VirtualNetworkApplianceManagerImpl.java | 9 +++++ .../secondary/SecondaryStorageVmManager.java | 11 ++++++ .../java/com/cloud/vm/UserVmManagerImpl.java | 8 ++++ ...MockVpcVirtualNetworkApplianceManager.java | 25 +++++++++---- .../com/cloud/consoleproxy/ConsoleProxy.java | 1 + .../SecondaryStorageManagerImpl.java | 11 ++++++ 12 files changed, 139 insertions(+), 14 deletions(-) diff --git a/api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java b/api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java index c47500c78495..a770e178bed1 100644 --- a/api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java +++ b/api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java @@ -17,17 +17,21 @@ 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.VirtualMachineProfile; public interface VirtualNetworkApplianceService { /** @@ -62,6 +66,10 @@ public interface VirtualNetworkApplianceService { VirtualRouter startRouter(long id) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException; + void startRouterForHA(String vmUuid, Map params, DeploymentPlanner planner) + throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, + OperationTimedoutException; + VirtualRouter destroyRouter(long routerId, Account caller, Long callerUserId) throws ResourceUnavailableException, ConcurrentOperationException; VirtualRouter findRouter(long routerId); diff --git a/api/src/main/java/com/cloud/vm/UserVmService.java b/api/src/main/java/com/cloud/vm/UserVmService.java index 787ed7bde37e..177c840db335 100644 --- a/api/src/main/java/com/cloud/vm/UserVmService.java +++ b/api/src/main/java/com/cloud/vm/UserVmService.java @@ -42,9 +42,11 @@ 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; +import com.cloud.exception.OperationTimedoutException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.StorageUnavailableException; @@ -110,6 +112,10 @@ public interface UserVmService { UserVm startVirtualMachine(StartVMCmd cmd) throws StorageUnavailableException, ExecutionException, ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException; + void startVirtualMachineForHA(String vmUuid, Map params, + DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, + ConcurrentOperationException, OperationTimedoutException; + UserVm rebootVirtualMachine(RebootVMCmd cmd) throws InsufficientCapacityException, ResourceUnavailableException; UserVm updateVirtualMachine(UpdateVMCmd cmd) throws ResourceUnavailableException, InsufficientCapacityException; diff --git a/server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java b/server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java index a71c692aab11..f9c7a85dcb05 100644 --- a/server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java +++ b/server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java @@ -22,16 +22,16 @@ 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; @@ -42,6 +42,7 @@ import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; 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 +183,11 @@ public ConsoleProxyVO startProxy(long proxyVmId, boolean ignoreRestartSetting) { return null; } + @Override + public void startProxyForHA(String vmUuid, Map params, + DeploymentPlanner planner) { + } + @Override public boolean destroyProxy(long proxyVmId) { return false; diff --git a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java index 6280495fb1a9..b062a6411b2e 100644 --- a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java +++ b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java @@ -16,11 +16,19 @@ // 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.VirtualMachineProfile; + public interface ConsoleProxyManager extends Manager, ConsoleProxyService { int DEFAULT_PROXY_CAPACITY = 50; @@ -50,6 +58,10 @@ public interface ConsoleProxyManager extends Manager, ConsoleProxyService { ConsoleProxyVO startProxy(long proxyVmId, boolean ignoreRestartSetting); + void startProxyForHA(String vmUuid, Map params, DeploymentPlanner planner) + throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, + OperationTimedoutException; + boolean stopProxy(long proxyVmId); boolean rebootProxy(long proxyVmId); diff --git a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index c1d4a22bf773..04b0585f3590 100644 --- a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -75,6 +75,9 @@ 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 ConsoleProxyVO startProxy(long proxyVmId, boolean ignoreRestartSetting) { return null; } + @Override + @ActionEvent(eventType = EventTypes.EVENT_PROXY_START, eventDescription = "Restarting console proxy VM for HA", async = true) + public void startProxyForHA(String vmUuid, Map params, + DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, + ConcurrentOperationException, OperationTimedoutException { + virtualMachineManager.advanceStart(vmUuid, params, planner); + } + public ConsoleProxyVO assignProxyFromRunningPool(long dataCenterId) { if (s_logger.isDebugEnabled()) { diff --git a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java index c68397566c64..a71ba465d9de 100644 --- a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -66,13 +66,14 @@ import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.VirtualNetworkApplianceService; 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 +82,7 @@ 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 +146,10 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements Configur VolumeDao volumeDao; @Inject DataStoreProviderManager dataStoreProviderMgr; + @Inject + VirtualNetworkApplianceService virtualNetworkApplianceService; + @Inject + UserVmManager userVmManager; long _serverId; @@ -437,6 +443,27 @@ public void scheduleRestart(VMInstanceVO vm, boolean investigate) { } + protected void startVm(VirtualMachine vm, Map params, + DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, + ConcurrentOperationException, OperationTimedoutException { + switch (vm.getType()) { + case DomainRouter: + virtualNetworkApplianceService.startRouterForHA(vm.getUuid(), params, planner); + break; + case ConsoleProxy: + consoleProxyManager.startProxyForHA(vm.getUuid(), params, planner); + break; + case SecondaryStorageVm: + secondaryStorageVmManager.startSecStorageVmForHA(vm.getUuid(), params, planner); + break; + case User: + userVmManager.startVirtualMachineForHA(vm.getUuid(), params, planner); + break; + default: + _itMgr.advanceStart(vm.getUuid(), params, planner); + } + } + protected Long restart(final HaWorkVO work) { s_logger.debug("RESTART with HAWORK"); List items = _haDao.listFutureHaWorkForVm(work.getInstanceId(), work.getId()); @@ -628,10 +655,10 @@ protected Long restart(final HaWorkVO work) { } } // First try starting the vm with its original planner, if it doesn't succeed send HAPlanner as its an emergency. - _itMgr.startForHA(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.startForHA(vm.getUuid(), params, _haPlanners.get(0)); + startVm(vm, params, _haPlanners.get(0)); } VMInstanceVO started = _instanceDao.findById(vm.getId()); @@ -658,6 +685,10 @@ protected Long restart(final HaWorkVO work) { 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); + } 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 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()); 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 19d8fc72b29b..7e69ba2b07f5 100644 --- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -123,6 +123,7 @@ 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 @@ public VirtualRouter startRouter(final long routerId, final boolean reprogramNet return virtualRouter; } + @Override + @ActionEvent(eventType = EventTypes.EVENT_ROUTER_START, eventDescription = "Restarting router VM for HA", async = true) + public void startRouterForHA(String vmUuid, Map params, DeploymentPlanner planner) + throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, + OperationTimedoutException { + _itMgr.advanceStart(vmUuid, params, planner); + } + @Override public List getRoutersForNetwork(final long networkId) { final List routers = _routerDao.findByNetwork(networkId); diff --git a/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java b/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java index b534fc39e66c..ca80834bca75 100644 --- a/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java +++ b/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java @@ -17,16 +17,23 @@ 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.VirtualMachineProfile; public interface SecondaryStorageVmManager extends Manager { @@ -47,6 +54,10 @@ public interface SecondaryStorageVmManager extends Manager { public SecondaryStorageVmVO startSecStorageVm(long ssVmVmId); + void startSecStorageVmForHA(String vmUuid, Map params, + DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, + ConcurrentOperationException, OperationTimedoutException; + public boolean stopSecStorageVm(long ssVmVmId); public boolean rebootSecStorageVm(long ssVmVmId); diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index d94847619982..22fa6a76414f 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -3230,6 +3230,14 @@ public UserVm startVirtualMachine(StartVMCmd cmd) throws ExecutionException, Con return startVirtualMachine(cmd.getId(), cmd.getPodId(), cmd.getClusterId(), cmd.getHostId(), additonalParams, cmd.getDeploymentPlanner()).first(); } + @Override + @ActionEvent(eventType = EventTypes.EVENT_VM_START, eventDescription = "Restarting VM for HA", async = true) + public void startVirtualMachineForHA(String vmUuid, Map params, + DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, + ConcurrentOperationException, OperationTimedoutException { + _itMgr.advanceStart(vmUuid, params, planner); + } + @Override @ActionEvent(eventType = EventTypes.EVENT_VM_REBOOT, eventDescription = "rebooting Vm", async = true) public UserVm rebootVirtualMachine(RebootVMCmd cmd) throws InsufficientCapacityException, ResourceUnavailableException { diff --git a/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java index 3949fa8e6caf..d1c01d4f2321 100644 --- a/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java +++ b/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -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; @@ -35,13 +46,6 @@ import com.cloud.vm.DomainRouterVO; import com.cloud.vm.Nic; 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 +145,13 @@ public VirtualRouter startRouter(final long id) throws ResourceUnavailableExcept return null; } + @Override + public void startRouterForHA(String vmUuid, Map params, + DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, + ConcurrentOperationException, OperationTimedoutException { + + } + /* (non-Javadoc) * @see com.cloud.network.VirtualNetworkApplianceService#destroyRouter(long, com.cloud.user.Account, java.lang.Long) */ diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java index 2753d9fcb654..9e2702759a86 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java @@ -1,3 +1,4 @@ + // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information diff --git a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java index 59ac4f449382..084b4b97b2c4 100644 --- a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java +++ b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java @@ -80,6 +80,9 @@ 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 SecondaryStorageVmVO startSecStorageVm(long secStorageVmId) { } } + @Override + @ActionEvent(eventType = EventTypes.EVENT_SSVM_START, eventDescription = "Restarting secondary storage VM for HA", async = true) + public void startSecStorageVmForHA(String vmUuid, Map params, + DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, + ConcurrentOperationException, OperationTimedoutException { + _itMgr.advanceStart(vmUuid, params, planner); + } + SecondaryStorageVmVO getSSVMfromHost(HostVO ssAHost) { if (ssAHost.getType() == Host.Type.SecondaryStorageVM) { return _secStorageVmDao.findByInstanceName(ssAHost.getName()); From 79e0effd0a02d366c9e96b1af50cd89e2ca9c0d0 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 12 Jun 2024 16:55:36 +0530 Subject: [PATCH 03/10] remove unused methods Signed-off-by: Abhishek Kumar --- .../java/com/cloud/vm/VirtualMachineManager.java | 3 --- .../com/cloud/vm/VirtualMachineManagerImpl.java | 13 ++----------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java b/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java index 1867a6482adc..3f7d6be6d889 100644 --- a/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java +++ b/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java @@ -130,9 +130,6 @@ void allocate(String vmInstanceName, VirtualMachineTemplate template, ServiceOff boolean stateTransitTo(VirtualMachine vm, VirtualMachine.Event e, Long hostId) throws NoTransitionException; - void startForHA(String vmUuid, Map params, DeploymentPlanner planner) - throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; - void advanceStart(String vmUuid, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException; diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java index bc6219b0e592..f21b0714451f 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -47,9 +47,6 @@ import javax.naming.ConfigurationException; import javax.persistence.EntityExistsException; -import com.cloud.event.ActionEvent; -import com.cloud.event.ActionEventUtils; -import com.google.gson.Gson; import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; @@ -168,6 +165,7 @@ import com.cloud.deploy.DeploymentPlanner.ExcludeList; import com.cloud.deploy.DeploymentPlanningManager; import com.cloud.deployasis.dao.UserVmDeployAsIsDetailsDao; +import com.cloud.event.ActionEventUtils; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventUtils; import com.cloud.event.UsageEventVO; @@ -270,6 +268,7 @@ import com.cloud.vm.snapshot.VMSnapshotManager; import com.cloud.vm.snapshot.VMSnapshotVO; import com.cloud.vm.snapshot.dao.VMSnapshotDao; +import com.google.gson.Gson; public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMachineManager, VmWorkJobHandler, Listener, Configurable { private static final Logger s_logger = Logger.getLogger(VirtualMachineManagerImpl.class); @@ -989,14 +988,6 @@ protected boolean areAffinityGroupsAssociated(final VirtualMachineProfile vmProf return vmGroupCount > 0; } - @Override - @ActionEvent(eventType = EventTypes.EVENT_VM_START, eventDescription = "Restarting VM for HA") - public void startForHA(String vmUuid, Map params, - DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, - ConcurrentOperationException { - advanceStart(vmUuid, params, planner); - } - @Override public void advanceStart(final String vmUuid, final Map params, final DeploymentPlanner planner) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException { From bb37a0464c56b1fc41d7caf24d1c9f2394852a51 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 12 Jun 2024 16:56:59 +0530 Subject: [PATCH 04/10] remove --- .../src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java index f21b0714451f..243613907ff4 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -47,6 +47,8 @@ import javax.naming.ConfigurationException; import javax.persistence.EntityExistsException; +import com.cloud.event.ActionEventUtils; +import com.google.gson.Gson; import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; @@ -165,7 +167,6 @@ import com.cloud.deploy.DeploymentPlanner.ExcludeList; import com.cloud.deploy.DeploymentPlanningManager; import com.cloud.deployasis.dao.UserVmDeployAsIsDetailsDao; -import com.cloud.event.ActionEventUtils; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventUtils; import com.cloud.event.UsageEventVO; @@ -268,7 +269,6 @@ import com.cloud.vm.snapshot.VMSnapshotManager; import com.cloud.vm.snapshot.VMSnapshotVO; import com.cloud.vm.snapshot.dao.VMSnapshotDao; -import com.google.gson.Gson; public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMachineManager, VmWorkJobHandler, Listener, Configurable { private static final Logger s_logger = Logger.getLogger(VirtualMachineManagerImpl.class); From 591c04cf2e6a4b997b8f457bfb5245b8567a2614 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 12 Jun 2024 18:46:47 +0530 Subject: [PATCH 05/10] fix --- .../main/java/com/cloud/ha/HighAvailabilityManagerImpl.java | 6 +++--- .../java/com/cloud/ha/HighAvailabilityManagerImplTest.java | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java index a71ba465d9de..c743ab666640 100644 --- a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -66,7 +66,7 @@ import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.VirtualNetworkApplianceService; +import com.cloud.network.VpcVirtualNetworkApplianceService; import com.cloud.resource.ResourceManager; import com.cloud.server.ManagementServer; import com.cloud.service.ServiceOfferingVO; @@ -147,7 +147,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements Configur @Inject DataStoreProviderManager dataStoreProviderMgr; @Inject - VirtualNetworkApplianceService virtualNetworkApplianceService; + VpcVirtualNetworkApplianceService routerService; @Inject UserVmManager userVmManager; @@ -448,7 +448,7 @@ protected void startVm(VirtualMachine vm, Map Date: Wed, 12 Jun 2024 23:58:41 +0530 Subject: [PATCH 06/10] event data Signed-off-by: Abhishek Kumar --- .../VirtualNetworkApplianceService.java | 3 +- .../main/java/com/cloud/vm/UserVmService.java | 2 +- .../AgentBasedConsoleProxyManager.java | 3 +- .../consoleproxy/ConsoleProxyManager.java | 3 +- .../consoleproxy/ConsoleProxyManagerImpl.java | 6 +-- .../cloud/ha/HighAvailabilityManagerImpl.java | 41 ++++++++++++------- .../VirtualNetworkApplianceManagerImpl.java | 6 +-- .../secondary/SecondaryStorageVmManager.java | 3 +- .../java/com/cloud/vm/UserVmManagerImpl.java | 6 +-- ...MockVpcVirtualNetworkApplianceManager.java | 5 ++- .../SecondaryStorageManagerImpl.java | 6 +-- 11 files changed, 50 insertions(+), 34 deletions(-) diff --git a/api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java b/api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java index a770e178bed1..cb92739d2837 100644 --- a/api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java +++ b/api/src/main/java/com/cloud/network/VirtualNetworkApplianceService.java @@ -31,6 +31,7 @@ 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 { @@ -66,7 +67,7 @@ public interface VirtualNetworkApplianceService { VirtualRouter startRouter(long id) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException; - void startRouterForHA(String vmUuid, Map params, DeploymentPlanner planner) + void startRouterForHA(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException; diff --git a/api/src/main/java/com/cloud/vm/UserVmService.java b/api/src/main/java/com/cloud/vm/UserVmService.java index 177c840db335..0811344717f8 100644 --- a/api/src/main/java/com/cloud/vm/UserVmService.java +++ b/api/src/main/java/com/cloud/vm/UserVmService.java @@ -112,7 +112,7 @@ public interface UserVmService { UserVm startVirtualMachine(StartVMCmd cmd) throws StorageUnavailableException, ExecutionException, ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException; - void startVirtualMachineForHA(String vmUuid, Map params, + void startVirtualMachineForHA(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException; diff --git a/server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java b/server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java index f9c7a85dcb05..3fc9f4dc8af6 100644 --- a/server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java +++ b/server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java @@ -41,6 +41,7 @@ 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; @@ -184,7 +185,7 @@ public ConsoleProxyVO startProxy(long proxyVmId, boolean ignoreRestartSetting) { } @Override - public void startProxyForHA(String vmUuid, Map params, + public void startProxyForHA(VirtualMachine vm, Map params, DeploymentPlanner planner) { } diff --git a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java index b062a6411b2e..0b672ff22151 100644 --- a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java +++ b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java @@ -27,6 +27,7 @@ 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 { @@ -58,7 +59,7 @@ public interface ConsoleProxyManager extends Manager, ConsoleProxyService { ConsoleProxyVO startProxy(long proxyVmId, boolean ignoreRestartSetting); - void startProxyForHA(String vmUuid, Map params, DeploymentPlanner planner) + void startProxyForHA(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException; diff --git a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 04b0585f3590..70514aa1e974 100644 --- a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -497,11 +497,11 @@ public ConsoleProxyVO startProxy(long proxyVmId, boolean ignoreRestartSetting) { } @Override - @ActionEvent(eventType = EventTypes.EVENT_PROXY_START, eventDescription = "Restarting console proxy VM for HA", async = true) - public void startProxyForHA(String vmUuid, Map params, + @ActionEvent(eventType = EventTypes.EVENT_PROXY_START, eventDescription = "restarting console proxy VM for HA", async = true) + public void startProxyForHA(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException { - virtualMachineManager.advanceStart(vmUuid, params, planner); + virtualMachineManager.advanceStart(vm.getUuid(), params, planner); } public ConsoleProxyVO assignProxyFromRunningPool(long dataCenterId) { diff --git a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java index c743ab666640..f2bf6435a183 100644 --- a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -28,6 +28,8 @@ 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; @@ -446,21 +448,30 @@ public void scheduleRestart(VMInstanceVO vm, boolean investigate) { protected void startVm(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException { - switch (vm.getType()) { - case DomainRouter: - routerService.startRouterForHA(vm.getUuid(), params, planner); - break; - case ConsoleProxy: - consoleProxyManager.startProxyForHA(vm.getUuid(), params, planner); - break; - case SecondaryStorageVm: - secondaryStorageVmManager.startSecStorageVmForHA(vm.getUuid(), params, planner); - break; - case User: - userVmManager.startVirtualMachineForHA(vm.getUuid(), params, planner); - break; - default: - _itMgr.advanceStart(vm.getUuid(), params, planner); + 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(); } } 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 7e69ba2b07f5..64595e8eccd4 100644 --- a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -3012,11 +3012,11 @@ public VirtualRouter startRouter(final long routerId, final boolean reprogramNet } @Override - @ActionEvent(eventType = EventTypes.EVENT_ROUTER_START, eventDescription = "Restarting router VM for HA", async = true) - public void startRouterForHA(String vmUuid, Map params, DeploymentPlanner planner) + @ActionEvent(eventType = EventTypes.EVENT_ROUTER_START, eventDescription = "restarting router VM for HA", async = true) + public void startRouterForHA(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException { - _itMgr.advanceStart(vmUuid, params, planner); + _itMgr.advanceStart(vm.getUuid(), params, planner); } @Override diff --git a/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java b/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java index ca80834bca75..a34658a7f6d4 100644 --- a/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java +++ b/server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java @@ -33,6 +33,7 @@ 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 { @@ -54,7 +55,7 @@ public interface SecondaryStorageVmManager extends Manager { public SecondaryStorageVmVO startSecStorageVm(long ssVmVmId); - void startSecStorageVmForHA(String vmUuid, Map params, + void startSecStorageVmForHA(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException; diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 22fa6a76414f..ebdb734aa1fd 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -3231,11 +3231,11 @@ public UserVm startVirtualMachine(StartVMCmd cmd) throws ExecutionException, Con } @Override - @ActionEvent(eventType = EventTypes.EVENT_VM_START, eventDescription = "Restarting VM for HA", async = true) - public void startVirtualMachineForHA(String vmUuid, Map params, + @ActionEvent(eventType = EventTypes.EVENT_VM_START, eventDescription = "restarting VM for HA", async = true) + public void startVirtualMachineForHA(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException { - _itMgr.advanceStart(vmUuid, params, planner); + _itMgr.advanceStart(vm.getUuid(), params, planner); } @Override diff --git a/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java index d1c01d4f2321..74345eb3979c 100644 --- a/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java +++ b/server/src/test/java/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -45,6 +45,7 @@ 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; @Component @@ -146,8 +147,8 @@ public VirtualRouter startRouter(final long id) throws ResourceUnavailableExcept } @Override - public void startRouterForHA(String vmUuid, Map params, - DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, + public void startRouterForHA(VirtualMachine vm, Map params, + DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException { } diff --git a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java index 084b4b97b2c4..450650cec337 100644 --- a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java +++ b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java @@ -289,11 +289,11 @@ public SecondaryStorageVmVO startSecStorageVm(long secStorageVmId) { } @Override - @ActionEvent(eventType = EventTypes.EVENT_SSVM_START, eventDescription = "Restarting secondary storage VM for HA", async = true) - public void startSecStorageVmForHA(String vmUuid, Map params, + @ActionEvent(eventType = EventTypes.EVENT_SSVM_START, eventDescription = "restarting secondary storage VM for HA", async = true) + public void startSecStorageVmForHA(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException { - _itMgr.advanceStart(vmUuid, params, planner); + _itMgr.advanceStart(vm.getUuid(), params, planner); } SecondaryStorageVmVO getSSVMfromHost(HostVO ssAHost) { From 97852562a2181b48d844a05b9a65e2028149b0eb Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 13 Jun 2024 10:35:02 +0530 Subject: [PATCH 07/10] fix Signed-off-by: Abhishek Kumar --- .../com/cloud/vm/VirtualMachineManagerImpl.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java index 243613907ff4..eec8da309579 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -4802,6 +4802,18 @@ protected void HandlePowerStateReport(final String subject, final String senderA } } + protected 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 @@ private void handlePowerOnReportWithNoPendingJobsOnVM(final VMInstanceVO vm) { + " -> 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 @@ private void handlePowerOffReportWithNoPendingJobsOnVM(final VMInstanceVO vm) { 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( From 064fa25ebe06058c2c0a2a050b8e6437abcbf3f2 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 13 Jun 2024 10:37:30 +0530 Subject: [PATCH 08/10] fix Signed-off-by: Abhishek Kumar --- .../src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java index f2bf6435a183..54054ed0da78 100644 --- a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -691,7 +691,7 @@ protected Long restart(final HaWorkVO work) { } 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 resource 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 " + From 03d60b98304b1d0129b6c92c7ef21a3ea7348fe5 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 13 Jun 2024 10:38:53 +0530 Subject: [PATCH 09/10] change Signed-off-by: Abhishek Kumar --- .../src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java | 2 +- .../src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java index eec8da309579..70fca76a613c 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -4802,7 +4802,7 @@ protected void HandlePowerStateReport(final String subject, final String senderA } } - protected ApiCommandResourceType getApiCommandResourceTypeForVm(VirtualMachine vm) { + private ApiCommandResourceType getApiCommandResourceTypeForVm(VirtualMachine vm) { switch (vm.getType()) { case DomainRouter: return ApiCommandResourceType.DomainRouter; diff --git a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java index 54054ed0da78..81ae44a97634 100644 --- a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -445,7 +445,7 @@ public void scheduleRestart(VMInstanceVO vm, boolean investigate) { } - protected void startVm(VirtualMachine vm, Map params, + private void startVm(VirtualMachine vm, Map params, DeploymentPlanner planner) throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, OperationTimedoutException { CallContext ctx = CallContext.register(CallContext.current(), ApiCommandResourceType.VirtualMachine); From 8b49800cd0c7e4f15c333836002bf52a242f4430 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 13 Jun 2024 12:52:02 +0530 Subject: [PATCH 10/10] remove unnecessary change Co-authored-by: dahn --- .../src/main/java/com/cloud/consoleproxy/ConsoleProxy.java | 1 - 1 file changed, 1 deletion(-) diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java index 9e2702759a86..2753d9fcb654 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java @@ -1,4 +1,3 @@ - // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information