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 491adfd71a4..3b9358a3682 100644 --- a/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java +++ b/engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java @@ -155,7 +155,7 @@ public interface VirtualMachineManager extends Manager { * @param serviceOfferingId * @return */ - boolean upgradeVmDb(long vmId, long serviceOfferingId); + boolean upgradeVmDb(long vmId, ServiceOffering newServiceOffering, ServiceOffering currentServiceOffering); /** * @param vm @@ -204,7 +204,7 @@ public interface VirtualMachineManager extends Manager { boolean replugNic(Network network, NicTO nic, VirtualMachineTO vm, ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; - VirtualMachine reConfigureVm(String vmUuid, ServiceOffering newServiceOffering, boolean sameHost) throws ResourceUnavailableException, ConcurrentOperationException, + VirtualMachine reConfigureVm(String vmUuid, ServiceOffering oldServiceOffering, ServiceOffering newServiceOffering, Map customParameters, boolean sameHost) throws ResourceUnavailableException, ConcurrentOperationException, InsufficientServerCapacityException; void findHostAndMigrate(String vmUuid, Long newSvcOfferingId, DeploymentPlanner.ExcludeList excludeHostList) throws InsufficientCapacityException, 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 a29002bf81e..20750b33f7e 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -40,8 +40,6 @@ import java.util.concurrent.TimeUnit; import javax.inject.Inject; import javax.naming.ConfigurationException; -import com.cloud.network.dao.NetworkDetailVO; -import com.cloud.network.dao.NetworkDetailsDao; import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd; @@ -143,6 +141,7 @@ import com.cloud.deploy.DeploymentPlanner.ExcludeList; import com.cloud.deploy.DeploymentPlanningManager; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventUtils; +import com.cloud.event.UsageEventVO; import com.cloud.exception.AffinityConflictException; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.ConcurrentOperationException; @@ -165,6 +164,8 @@ import com.cloud.hypervisor.HypervisorGuruManager; import com.cloud.network.Network; import com.cloud.network.NetworkModel; import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailVO; +import com.cloud.network.dao.NetworkDetailsDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.router.VirtualRouter; import com.cloud.network.security.SecurityGroupManager; @@ -239,6 +240,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac private static final String VM_SYNC_ALERT_SUBJECT = "VM state sync alert"; + @Inject + private UserVmManager _userVmMgr; @Inject private DataStoreManager dataStoreMgr; @Inject @@ -3533,13 +3536,20 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } @Override - public boolean upgradeVmDb(final long vmId, final long serviceOfferingId) { - final VMInstanceVO vmForUpdate = _vmDao.createForUpdate(); - vmForUpdate.setServiceOfferingId(serviceOfferingId); - final ServiceOffering newSvcOff = _entityMgr.findById(ServiceOffering.class, serviceOfferingId); + public boolean upgradeVmDb(final long vmId, final ServiceOffering newServiceOffering, ServiceOffering currentServiceOffering) { + + final VMInstanceVO vmForUpdate = _vmDao.findById(vmId); + vmForUpdate.setServiceOfferingId(newServiceOffering.getId()); + final ServiceOffering newSvcOff = _entityMgr.findById(ServiceOffering.class, newServiceOffering.getId()); vmForUpdate.setHaEnabled(newSvcOff.isOfferHA()); vmForUpdate.setLimitCpuUse(newSvcOff.getLimitCpuUse()); vmForUpdate.setServiceOfferingId(newSvcOff.getId()); + if (newServiceOffering.isDynamic()) { + saveCustomOfferingDetails(vmId, newServiceOffering); + } + if (currentServiceOffering.isDynamic() && !newServiceOffering.isDynamic()) { + removeCustomOfferingDetails(vmId); + } return _vmDao.update(vmId, vmForUpdate); } @@ -4221,8 +4231,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } @Override - public VMInstanceVO reConfigureVm(final String vmUuid, final ServiceOffering oldServiceOffering, - final boolean reconfiguringOnExistingHost) + public VMInstanceVO reConfigureVm(final String vmUuid, final ServiceOffering oldServiceOffering, final ServiceOffering newServiceOffering, + Map customParameters, final boolean reconfiguringOnExistingHost) throws ResourceUnavailableException, InsufficientServerCapacityException, ConcurrentOperationException { final AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext(); @@ -4232,14 +4242,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac final VirtualMachine vm = _vmDao.findByUuid(vmUuid); placeHolder = createPlaceHolderWork(vm.getId()); try { - return orchestrateReConfigureVm(vmUuid, oldServiceOffering, reconfiguringOnExistingHost); + return orchestrateReConfigureVm(vmUuid, oldServiceOffering, newServiceOffering, reconfiguringOnExistingHost); } finally { if (placeHolder != null) { _workJobDao.expunge(placeHolder.getId()); } } } else { - final Outcome outcome = reconfigureVmThroughJobQueue(vmUuid, oldServiceOffering, reconfiguringOnExistingHost); + final Outcome outcome = reconfigureVmThroughJobQueue(vmUuid, oldServiceOffering, newServiceOffering, customParameters, reconfiguringOnExistingHost); VirtualMachine vm = null; try { @@ -4268,14 +4278,12 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } } - private VMInstanceVO orchestrateReConfigureVm(final String vmUuid, final ServiceOffering oldServiceOffering, final boolean reconfiguringOnExistingHost) throws ResourceUnavailableException, - ConcurrentOperationException { + private VMInstanceVO orchestrateReConfigureVm(final String vmUuid, final ServiceOffering oldServiceOffering, final ServiceOffering newServiceOffering, + final boolean reconfiguringOnExistingHost) throws ResourceUnavailableException, ConcurrentOperationException { final VMInstanceVO vm = _vmDao.findByUuid(vmUuid); + upgradeVmDb(vm.getId(), newServiceOffering, oldServiceOffering); - final long newServiceofferingId = vm.getServiceOfferingId(); - final ServiceOffering newServiceOffering = _offeringDao.findById(vm.getId(), newServiceofferingId); final HostVO hostVo = _hostDao.findById(vm.getHostId()); - final Float memoryOvercommitRatio = CapacityManager.MemOverprovisioningFactor.valueIn(hostVo.getClusterId()); final Float cpuOvercommitRatio = CapacityManager.CpuOverprovisioningFactor.valueIn(hostVo.getClusterId()); final long minMemory = (long)(newServiceOffering.getRamSize() / memoryOvercommitRatio); @@ -4302,7 +4310,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac if (reconfiguringOnExistingHost) { vm.setServiceOfferingId(oldServiceOffering.getId()); _capacityMgr.releaseVmCapacity(vm, false, false, vm.getHostId()); //release the old capacity - vm.setServiceOfferingId(newServiceofferingId); + vm.setServiceOfferingId(newServiceOffering.getId()); _capacityMgr.allocateVmCapacity(vm, false); // lock the new capacity } @@ -4311,7 +4319,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac s_logger.error("Unable to scale vm due to " + (reconfigureAnswer == null ? "" : reconfigureAnswer.getDetails())); throw new CloudRuntimeException("Unable to scale vm due to " + (reconfigureAnswer == null ? "" : reconfigureAnswer.getDetails())); } - + if (vm.getType().equals(VirtualMachine.Type.User)) { + _userVmMgr.generateUsageEvent(vm, vm.isDisplayVm(), EventTypes.EVENT_VM_DYNAMIC_SCALE); + } success = true; } catch (final OperationTimedoutException e) { throw new AgentUnavailableException("Operation timed out on reconfiguring " + vm, dstHostId); @@ -4320,7 +4330,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } finally { if (!success) { _capacityMgr.releaseVmCapacity(vm, false, false, vm.getHostId()); // release the new capacity - vm.setServiceOfferingId(oldServiceOffering.getId()); + upgradeVmDb(vm.getId(), oldServiceOffering, newServiceOffering); // rollback _capacityMgr.allocateVmCapacity(vm, false); // allocate the old capacity } } @@ -4329,6 +4339,33 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } + private void removeCustomOfferingDetails(long vmId) { + Map details = userVmDetailsDao.listDetailsKeyPairs(vmId); + details.remove(UsageEventVO.DynamicParameters.cpuNumber.name()); + details.remove(UsageEventVO.DynamicParameters.cpuSpeed.name()); + details.remove(UsageEventVO.DynamicParameters.memory.name()); + List detailList = new ArrayList(); + for(Map.Entry entry: details.entrySet()) { + UserVmDetailVO detailVO = new UserVmDetailVO(vmId, entry.getKey(), entry.getValue(), true); + detailList.add(detailVO); + } + userVmDetailsDao.saveDetails(detailList); + } + + private void saveCustomOfferingDetails(long vmId, ServiceOffering serviceOffering) { + //save the custom values to the database. + Map details = userVmDetailsDao.listDetailsKeyPairs(vmId); + details.put(UsageEventVO.DynamicParameters.cpuNumber.name(), serviceOffering.getCpu().toString()); + details.put(UsageEventVO.DynamicParameters.cpuSpeed.name(), serviceOffering.getSpeed().toString()); + details.put(UsageEventVO.DynamicParameters.memory.name(), serviceOffering.getRamSize().toString()); + List detailList = new ArrayList(); + for (Map.Entry entry: details.entrySet()) { + UserVmDetailVO detailVO = new UserVmDetailVO(vmId, entry.getKey(), entry.getValue(), true); + detailList.add(detailVO); + } + userVmDetailsDao.saveDetails(detailList); + } + @Override public String getConfigComponentName() { return VirtualMachineManager.class.getSimpleName(); @@ -5225,7 +5262,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } public Outcome reconfigureVmThroughJobQueue( - final String vmUuid, final ServiceOffering newServiceOffering, final boolean reconfiguringOnExistingHost) { + final String vmUuid, final ServiceOffering oldServiceOffering, final ServiceOffering newServiceOffering, Map customParameters, final boolean reconfiguringOnExistingHost) { final CallContext context = CallContext.current(); final User user = context.getCallingUser(); @@ -5256,7 +5293,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac // save work context info (there are some duplications) final VmWorkReconfigure workInfo = new VmWorkReconfigure(user.getId(), account.getId(), vm.getId(), - VirtualMachineManagerImpl.VM_WORK_JOB_HANDLER, newServiceOffering.getId(), reconfiguringOnExistingHost); + VirtualMachineManagerImpl.VM_WORK_JOB_HANDLER, oldServiceOffering.getId(), newServiceOffering.getId(), customParameters, reconfiguringOnExistingHost); workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo)); _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId()); @@ -5420,10 +5457,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac s_logger.info("Unable to find vm " + work.getVmId()); } assert vm != null; + ServiceOfferingVO oldServiceOffering = _offeringDao.findById(work.getOldServiceOfferingId()); + ServiceOfferingVO newServiceOffering = _offeringDao.findById(work.getNewServiceOfferingId()); + if (newServiceOffering.isDynamic()) { + // update the service offering object with the custom parameters like cpu, memory + newServiceOffering = _offeringDao.getComputeOffering(newServiceOffering, work.getCustomParameters()); + } - final ServiceOffering newServiceOffering = _offeringDao.findById(vm.getId(), work.getNewServiceOfferingId()); - - reConfigureVm(vm.getUuid(), newServiceOffering, + reConfigureVm(vm.getUuid(), oldServiceOffering, newServiceOffering, work.getCustomParameters(), work.isSameHost()); return new Pair(JobInfo.Status.SUCCEEDED, null); } diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReconfigure.java b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReconfigure.java index 17abeb24537..f96a587dac0 100644 --- a/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReconfigure.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VmWorkReconfigure.java @@ -17,25 +17,40 @@ package com.cloud.vm; +import java.util.Map; + public class VmWorkReconfigure extends VmWork { private static final long serialVersionUID = -4517030323758086615L; + Long oldServiceOfferingId; Long newServiceOfferingId; + + Map customParameters; boolean sameHost; - public VmWorkReconfigure(long userId, long accountId, long vmId, String handlerName, - Long newServiceOfferingId, boolean sameHost) { + public VmWorkReconfigure(long userId, long accountId, long vmId, String handlerName, Long oldServiceOfferingId, + Long newServiceOfferingId, Map customParameters, boolean sameHost) { super(userId, accountId, vmId, handlerName); + this.oldServiceOfferingId = oldServiceOfferingId; this.newServiceOfferingId = newServiceOfferingId; + this.customParameters = customParameters; this.sameHost = sameHost; } + public Long getOldServiceOfferingId() { + return oldServiceOfferingId; + } + public Long getNewServiceOfferingId() { return newServiceOfferingId; } + public Map getCustomParameters() { + return customParameters; + } + public boolean isSameHost() { return sameHost; } diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 1ef96f225bf..c9ade17dc4f 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -4126,15 +4126,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe } _itMgr.checkIfCanUpgrade(systemVm, newServiceOffering); - final boolean result = _itMgr.upgradeVmDb(systemVmId, serviceOfferingId); - - if (newServiceOffering.isDynamic()) { - //save the custom values to the database. - _userVmMgr.saveCustomOfferingDetails(systemVmId, newServiceOffering); - } - if (currentServiceOffering.isDynamic() && !newServiceOffering.isDynamic()) { - _userVmMgr.removeCustomOfferingDetails(systemVmId); - } + final boolean result = _itMgr.upgradeVmDb(systemVmId, newServiceOffering, currentServiceOffering); if (result) { return _vmInstanceDao.findById(systemVmId); diff --git a/server/src/main/java/com/cloud/vm/UserVmManager.java b/server/src/main/java/com/cloud/vm/UserVmManager.java index f37fcd8dd35..6edf7e6caec 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManager.java +++ b/server/src/main/java/com/cloud/vm/UserVmManager.java @@ -33,7 +33,6 @@ import com.cloud.exception.ManagementServerException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.VirtualMachineMigrationException; -import com.cloud.offering.ServiceOffering; import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.user.Account; @@ -118,10 +117,6 @@ public interface UserVmManager extends UserVmService { //find a common place for all the scaling and upgrading code of both user and systemvms. void validateCustomParameters(ServiceOfferingVO serviceOffering, Map customParameters); - public void saveCustomOfferingDetails(long vmId, ServiceOffering serviceOffering); - - public void removeCustomOfferingDetails(long vmId); - void generateUsageEvent(VirtualMachine vm, boolean isDisplay, String eventType); void persistDeviceBusInfo(UserVmVO paramUserVmVO, String paramString); diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index adadf68c49d..da493e7c1cf 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -1047,14 +1047,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir // Check that the specified service offering ID is valid _itMgr.checkIfCanUpgrade(vmInstance, newServiceOffering); - _itMgr.upgradeVmDb(vmId, svcOffId); - if (newServiceOffering.isDynamic()) { - //save the custom values to the database. - saveCustomOfferingDetails(vmId, newServiceOffering); - } - if (currentServiceOffering.isDynamic() && !newServiceOffering.isDynamic()) { - removeCustomOfferingDetails(vmId); - } + _itMgr.upgradeVmDb(vmId, newServiceOffering, currentServiceOffering); // Increment or decrement CPU and Memory count accordingly. if (! VirtualMachineManager.ResoureCountRunningVMsonly.value()) { @@ -1176,14 +1169,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir ServiceOffering newSvcOffering = _offeringDao.findById(svcOffId); _accountMgr.checkAccess(owner, newSvcOffering, _dcDao.findById(vmInstance.getDataCenterId())); - _itMgr.upgradeVmDb(vmId, svcOffId); - if (newServiceOffering.isDynamic()) { - //save the custom values to the database. - saveCustomOfferingDetails(vmId, newServiceOffering); - } - if (currentServiceOffering.isDynamic() && !newServiceOffering.isDynamic()) { - removeCustomOfferingDetails(vmId); - } + _itMgr.upgradeVmDb(vmId, newServiceOffering, currentServiceOffering); // Increment or decrement CPU and Memory count accordingly. if (! VirtualMachineManager.ResoureCountRunningVMsonly.value()) { @@ -1705,10 +1691,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir // Generate usage event for VM upgrade generateUsageEvent(vmInstance, vmInstance.isDisplayVm(), EventTypes.EVENT_VM_UPGRADE); } - if (vmInstance.getState().equals(State.Running)) { - // Generate usage event for Dynamic scaling of VM - generateUsageEvent( vmInstance, vmInstance.isDisplayVm(), EventTypes.EVENT_VM_DYNAMIC_SCALE); - } return vmInstance; } else { throw new CloudRuntimeException("Failed to scale the VM"); @@ -1881,17 +1863,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir } // #3 scale the vm now - _itMgr.upgradeVmDb(vmId, newServiceOfferingId); - if (newServiceOffering.isDynamic()) { - //save the custom values to the database. - saveCustomOfferingDetails(vmId, newServiceOffering); - } vmInstance = _vmInstanceDao.findById(vmId); - _itMgr.reConfigureVm(vmInstance.getUuid(), currentServiceOffering, existingHostHasCapacity); + _itMgr.reConfigureVm(vmInstance.getUuid(), currentServiceOffering, newServiceOffering, customParameters, existingHostHasCapacity); success = true; - if (currentServiceOffering.isDynamic() && !newServiceOffering.isDynamic()) { - removeCustomOfferingDetails(vmId); - } return success; } catch (InsufficientCapacityException e) { s_logger.warn("Received exception while scaling ", e); @@ -1903,16 +1877,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir s_logger.warn("Received exception while scaling ", e); } finally { if (!success) { - _itMgr.upgradeVmDb(vmId, currentServiceOffering.getId()); // rollback - // Decrement CPU and Memory count accordingly. if (newCpu > currentCpu) { _resourceLimitMgr.decrementResourceCount(caller.getAccountId(), ResourceType.cpu, new Long(newCpu - currentCpu)); } - //restoring old service offering will take care of removing new SO. - if(currentServiceOffering.isDynamic()){ - saveCustomOfferingDetails(vmId, currentServiceOffering); - } if (memoryDiff > 0) { _resourceLimitMgr.decrementResourceCount(caller.getAccountId(), ResourceType.memory, new Long(memoryDiff)); @@ -1924,35 +1892,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir return success; } - @Override - public void saveCustomOfferingDetails(long vmId, ServiceOffering serviceOffering) { - //save the custom values to the database. - Map details = userVmDetailsDao.listDetailsKeyPairs(vmId); - details.put(UsageEventVO.DynamicParameters.cpuNumber.name(), serviceOffering.getCpu().toString()); - details.put(UsageEventVO.DynamicParameters.cpuSpeed.name(), serviceOffering.getSpeed().toString()); - details.put(UsageEventVO.DynamicParameters.memory.name(), serviceOffering.getRamSize().toString()); - List detailList = new ArrayList(); - for (Map.Entry entry: details.entrySet()) { - UserVmDetailVO detailVO = new UserVmDetailVO(vmId, entry.getKey(), entry.getValue(), true); - detailList.add(detailVO); - } - userVmDetailsDao.saveDetails(detailList); - } - - @Override - public void removeCustomOfferingDetails(long vmId) { - Map details = userVmDetailsDao.listDetailsKeyPairs(vmId); - details.remove(UsageEventVO.DynamicParameters.cpuNumber.name()); - details.remove(UsageEventVO.DynamicParameters.cpuSpeed.name()); - details.remove(UsageEventVO.DynamicParameters.memory.name()); - List detailList = new ArrayList(); - for(Map.Entry entry: details.entrySet()) { - UserVmDetailVO detailVO = new UserVmDetailVO(vmId, entry.getKey(), entry.getValue(), true); - detailList.add(detailVO); - } - userVmDetailsDao.saveDetails(detailList); - } - @Override public HashMap getVirtualMachineStatistics(long hostId, String hostName, List vmIds) throws CloudRuntimeException { HashMap vmStatsById = new HashMap(); diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerTest.java index 1db138d06a7..b8cc06497a5 100644 --- a/server/src/test/java/com/cloud/vm/UserVmManagerTest.java +++ b/server/src/test/java/com/cloud/vm/UserVmManagerTest.java @@ -574,7 +574,7 @@ public class UserVmManagerTest { doReturn(VirtualMachine.State.Stopped).when(_vmInstance).getState(); when(_vmDao.findById(anyLong())).thenReturn(null); - doReturn(true).when(_itMgr).upgradeVmDb(anyLong(), anyLong()); + doReturn(true).when(_itMgr).upgradeVmDb(anyLong(), so1, so2); //when(_vmDao.findById(anyLong())).thenReturn(_vmMock); @@ -621,9 +621,9 @@ public class UserVmManagerTest { //when(ApiDBUtils.getCpuOverprovisioningFactor()).thenReturn(3f); when(_capacityMgr.checkIfHostHasCapacity(anyLong(), anyInt(), anyLong(), anyBoolean(), anyFloat(), anyFloat(), anyBoolean())).thenReturn(false); - when(_itMgr.reConfigureVm(_vmInstance.getUuid(), so1, false)).thenReturn(_vmInstance); + when(_itMgr.reConfigureVm(_vmInstance.getUuid(), so2, so1, new HashMap(), false)).thenReturn(_vmInstance); - doReturn(true).when(_itMgr).upgradeVmDb(anyLong(), anyLong()); + doReturn(true).when(_itMgr).upgradeVmDb(anyLong(), so1, so2); when(_vmDao.findById(anyLong())).thenReturn(_vmMock);