mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
server: NPE occured when dynamic scaling tried on VM and as part of this when VM tries to migrate if current host does not have capacity. (#3998)
Repro Steps: 1. Create a VM on host1 2. Make host1 capacity full by deploying multiple VMs 3. Try Dynamic scaling on VM on host1 4. NPE occurs when MS tries to find host to migrate the VM and then scale. Root cause: VM profile is not initiated properly with serviceoffering before planning for deployment Solution: Iniate VM profile with serviceoffering and also make sure custom compute parameters are handled
This commit is contained in:
parent
7b5700a040
commit
0d4f67ad8c
@ -207,7 +207,7 @@ public interface VirtualMachineManager extends Manager {
|
||||
VirtualMachine reConfigureVm(String vmUuid, ServiceOffering oldServiceOffering, ServiceOffering newServiceOffering, Map<String, String> customParameters, boolean sameHost) throws ResourceUnavailableException, ConcurrentOperationException,
|
||||
InsufficientServerCapacityException;
|
||||
|
||||
void findHostAndMigrate(String vmUuid, Long newSvcOfferingId, DeploymentPlanner.ExcludeList excludeHostList) throws InsufficientCapacityException,
|
||||
void findHostAndMigrate(String vmUuid, Long newSvcOfferingId, Map<String, String> customParameters, DeploymentPlanner.ExcludeList excludeHostList) throws InsufficientCapacityException,
|
||||
ConcurrentOperationException, ResourceUnavailableException;
|
||||
|
||||
void migrateForScale(String vmUuid, long srcHostId, DeployDestination dest, Long newSvcOfferingId) throws ResourceUnavailableException, ConcurrentOperationException;
|
||||
|
||||
@ -3869,15 +3869,19 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
|
||||
}
|
||||
|
||||
@Override
|
||||
public void findHostAndMigrate(final String vmUuid, final Long newSvcOfferingId, final ExcludeList excludes) throws InsufficientCapacityException, ConcurrentOperationException,
|
||||
public void findHostAndMigrate(final String vmUuid, final Long newSvcOfferingId, final Map<String, String> customParameters, final ExcludeList excludes) throws InsufficientCapacityException, ConcurrentOperationException,
|
||||
ResourceUnavailableException {
|
||||
|
||||
final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
|
||||
if (vm == null) {
|
||||
throw new CloudRuntimeException("Unable to find " + vmUuid);
|
||||
}
|
||||
|
||||
final VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm);
|
||||
ServiceOfferingVO newServiceOffering = _offeringDao.findById(newSvcOfferingId);
|
||||
if (newServiceOffering.isDynamic()) {
|
||||
newServiceOffering.setDynamicFlag(true);
|
||||
newServiceOffering = _offeringDao.getComputeOffering(newServiceOffering, customParameters);
|
||||
}
|
||||
final VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm, null, newServiceOffering, null, null);
|
||||
|
||||
final Long srcHostId = vm.getHostId();
|
||||
final Long oldSvcOfferingId = vm.getServiceOfferingId();
|
||||
|
||||
@ -150,7 +150,7 @@ public class VirtualMachineManagerImplTest {
|
||||
when(vmInstanceDaoMock.findById(anyLong())).thenReturn(vmInstanceMock);
|
||||
when(vmInstanceDaoMock.findByUuid(any(String.class))).thenReturn(vmInstanceMock);
|
||||
DeploymentPlanner.ExcludeList excludeHostList = new DeploymentPlanner.ExcludeList();
|
||||
virtualMachineManagerImpl.findHostAndMigrate(vmInstanceMock.getUuid(), 2l, excludeHostList);
|
||||
virtualMachineManagerImpl.findHostAndMigrate(vmInstanceMock.getUuid(), 2l, null, excludeHostList);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@ -1859,7 +1859,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
|
||||
// #2 migrate the vm if host doesn't have capacity or is in avoid set
|
||||
if (!existingHostHasCapacity) {
|
||||
_itMgr.findHostAndMigrate(vmInstance.getUuid(), newServiceOfferingId, excludes);
|
||||
_itMgr.findHostAndMigrate(vmInstance.getUuid(), newServiceOfferingId, customParameters, excludes);
|
||||
}
|
||||
|
||||
// #3 scale the vm now
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user