mirror of https://github.com/apache/cloudstack.git
Fix CID 1127027 Dereference before null check
template can't be null at this point as it has already been dereferenced
This commit is contained in:
parent
416206595e
commit
f611c24dd5
|
|
@ -35,6 +35,7 @@ import javax.naming.ConfigurationException;
|
|||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
|
||||
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
|
||||
import org.apache.cloudstack.affinity.AffinityGroupService;
|
||||
|
|
@ -68,15 +69,15 @@ import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationSer
|
|||
import org.apache.cloudstack.engine.service.api.OrchestrationService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
|
||||
import org.apache.cloudstack.framework.async.AsyncCallFuture;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
import org.apache.cloudstack.framework.config.Configurable;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.framework.jobs.AsyncJobManager;
|
||||
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
|
||||
import org.apache.cloudstack.framework.async.AsyncCallFuture;
|
||||
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
|
||||
import org.apache.cloudstack.storage.to.TemplateObjectTO;
|
||||
|
|
@ -243,9 +244,9 @@ import com.cloud.utils.db.Filter;
|
|||
import com.cloud.utils.db.GlobalLock;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.TransactionCallbackNoReturn;
|
||||
import com.cloud.utils.db.SearchCriteria.Func;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.TransactionCallbackNoReturn;
|
||||
import com.cloud.utils.db.TransactionCallbackWithException;
|
||||
import com.cloud.utils.db.TransactionCallbackWithExceptionNoReturn;
|
||||
import com.cloud.utils.db.TransactionStatus;
|
||||
|
|
@ -726,7 +727,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
return true;
|
||||
}
|
||||
|
||||
User user = _userDao.findById(userId);
|
||||
_userDao.findById(userId);
|
||||
try {
|
||||
VirtualMachineEntity vmEntity = _orchSrvc.getVirtualMachine(vm.getUuid());
|
||||
status = vmEntity.stop(Long.toString(userId));
|
||||
|
|
@ -1148,11 +1149,11 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vmInstance.getAccountId(), vmInstance.getDataCenterId(),
|
||||
vmInstance.getId(), oldNicIdString, oldNetworkOfferingId, null, 1L, VirtualMachine.class.getName(), vmInstance.getUuid());
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vmInstance.getAccountId(), vmInstance.getDataCenterId(),
|
||||
vmInstance.getId(), nicIdString, newNetworkOfferingId, null, 1L, VirtualMachine.class.getName(), vmInstance.getUuid());
|
||||
vmInstance.getId(), nicIdString, newNetworkOfferingId, null, 1L, VirtualMachine.class.getName(), vmInstance.getUuid());
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vmInstance.getAccountId(), vmInstance.getDataCenterId(),
|
||||
vmInstance.getId(), nicIdString, newNetworkOfferingId, null, 0L, VirtualMachine.class.getName(), vmInstance.getUuid());
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vmInstance.getAccountId(), vmInstance.getDataCenterId(),
|
||||
vmInstance.getId(), oldNicIdString, oldNetworkOfferingId, null, 0L, VirtualMachine.class.getName(), vmInstance.getUuid());
|
||||
vmInstance.getId(), oldNicIdString, oldNetworkOfferingId, null, 0L, VirtualMachine.class.getName(), vmInstance.getUuid());
|
||||
return _vmDao.findById(vmInstance.getId());
|
||||
}
|
||||
|
||||
|
|
@ -1286,7 +1287,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
ExcludeList excludes = new ExcludeList();
|
||||
boolean enableDynamicallyScaleVm = EnableDynamicallyScaleVm.valueIn(vmInstance.getDataCenterId());
|
||||
if(!enableDynamicallyScaleVm){
|
||||
throw new PermissionDeniedException("Dynamically scaling virtual machines is disabled for this zone, please contact your admin");
|
||||
throw new PermissionDeniedException("Dynamically scaling virtual machines is disabled for this zone, please contact your admin");
|
||||
}
|
||||
if (!vmInstance.isDynamicallyScalable()) {
|
||||
throw new CloudRuntimeException("Unable to Scale the vm: " + vmInstance.getUuid() + " as vm does not have tools to support dynamic scaling");
|
||||
|
|
@ -1430,24 +1431,24 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
Transaction.execute(new TransactionCallbackWithExceptionNoReturn<ResourceAllocationException>() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(TransactionStatus status) throws ResourceAllocationException {
|
||||
|
||||
|
||||
Account account = _accountDao.lockRow(vm.getAccountId(), true);
|
||||
|
||||
|
||||
// if the account is deleted, throw error
|
||||
if (account.getRemoved() != null) {
|
||||
throw new CloudRuntimeException(
|
||||
"Unable to recover VM as the account is deleted");
|
||||
}
|
||||
|
||||
|
||||
// Get serviceOffering for Virtual Machine
|
||||
ServiceOfferingVO serviceOffering = _serviceOfferingDao.findById(vm.getId(), vm.getServiceOfferingId());
|
||||
|
||||
|
||||
// First check that the maximum number of UserVMs, CPU and Memory limit for the given
|
||||
// accountId will not be exceeded
|
||||
resourceLimitCheck(account, new Long(serviceOffering.getCpu()), new Long(serviceOffering.getRamSize()));
|
||||
|
||||
|
||||
_haMgr.cancelDestroy(vm, vm.getHostId());
|
||||
|
||||
|
||||
try {
|
||||
if (!_itMgr.stateTransitTo(vm,
|
||||
VirtualMachine.Event.RecoveryRequested, null)) {
|
||||
|
|
@ -1462,7 +1463,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
"Unable to recover the vm because it is not in the correct state: "
|
||||
+ vmId);
|
||||
}
|
||||
|
||||
|
||||
// Recover the VM's disks
|
||||
List<VolumeVO> volumes = _volsDao.findByInstance(vmId);
|
||||
for (VolumeVO volume : volumes) {
|
||||
|
|
@ -1484,7 +1485,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
volume.getSize(), Volume.class.getName(), volume.getUuid());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Update Resource Count for the given account
|
||||
resourceCountIncrement(account.getId(), new Long(serviceOffering.getCpu()),
|
||||
new Long(serviceOffering.getRamSize()));
|
||||
|
|
@ -1544,7 +1545,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
String value = _configDao.getValue(Config.SetVmInternalNameUsingDisplayName.key());
|
||||
_instanceNameFlag = (value == null)?false:Boolean.parseBoolean(value);
|
||||
|
||||
_scaleRetry = NumbersUtil.parseInt(configs.get(Config.ScaleRetry.key()), 2);
|
||||
_scaleRetry = NumbersUtil.parseInt(configs.get(Config.ScaleRetry.key()), 2);
|
||||
|
||||
s_logger.info("User VM Manager is configured.");
|
||||
|
||||
|
|
@ -1795,7 +1796,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
_accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true,
|
||||
vmInstance);
|
||||
|
||||
|
||||
if (isDisplayVmEnabled != null) {
|
||||
if(!_accountMgr.isRootAdmin(caller.getType())){
|
||||
throw new PermissionDeniedException( "Cannot update parameter displayvm, only admin permitted ");
|
||||
|
|
@ -1808,7 +1809,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
@Override
|
||||
public UserVm updateVirtualMachine(long id, String displayName, String group, Boolean ha,
|
||||
Boolean isDisplayVmEnabled, Long osTypeId, String userData, Boolean isDynamicallyScalable, HTTPMethod httpMethod)
|
||||
throws ResourceUnavailableException, InsufficientCapacityException {
|
||||
throws ResourceUnavailableException, InsufficientCapacityException {
|
||||
UserVmVO vm = _vmDao.findById(id);
|
||||
if (vm == null) {
|
||||
throw new CloudRuntimeException(
|
||||
|
|
@ -1820,7 +1821,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
throw new InvalidParameterValueException("Vm with id " + id
|
||||
+ " is not in the right state");
|
||||
}
|
||||
|
||||
|
||||
if (displayName == null) {
|
||||
displayName = vm.getDisplayName();
|
||||
}
|
||||
|
|
@ -1834,7 +1835,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
throw new InvalidParameterValueException(
|
||||
"Can't enable ha for the vm as it's created from the Service offering having HA disabled");
|
||||
}
|
||||
|
||||
|
||||
if (isDisplayVmEnabled == null) {
|
||||
isDisplayVmEnabled = vm.isDisplayVm();
|
||||
}
|
||||
|
|
@ -1853,7 +1854,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
if (isDynamicallyScalable == null) {
|
||||
isDynamicallyScalable = vm.isDynamicallyScalable();
|
||||
}
|
||||
|
||||
|
||||
if (osTypeId == null) {
|
||||
osTypeId = vm.getGuestOSId();
|
||||
}
|
||||
|
|
@ -1886,26 +1887,26 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
List<? extends Nic> nics = _nicDao.listByVmId(vm.getId());
|
||||
if (nics == null || nics.isEmpty()) {
|
||||
s_logger.error("unable to find any nics for vm " + vm.getUuid());
|
||||
return false;
|
||||
s_logger.error("unable to find any nics for vm " + vm.getUuid());
|
||||
return false;
|
||||
}
|
||||
|
||||
for (Nic nic : nics) {
|
||||
Network network = _networkDao.findById(nic.getNetworkId());
|
||||
NicProfile nicProfile = new NicProfile(nic, network, null, null, null,
|
||||
_networkModel.isSecurityGroupSupportedInNetwork(network),
|
||||
_networkModel.getNetworkTag(template.getHypervisorType(), network));
|
||||
Network network = _networkDao.findById(nic.getNetworkId());
|
||||
NicProfile nicProfile = new NicProfile(nic, network, null, null, null,
|
||||
_networkModel.isSecurityGroupSupportedInNetwork(network),
|
||||
_networkModel.getNetworkTag(template.getHypervisorType(), network));
|
||||
|
||||
VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl(vm);
|
||||
VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl(vm);
|
||||
|
||||
UserDataServiceProvider element = _networkModel.getUserDataUpdateProvider(network);
|
||||
if (element == null) {
|
||||
throw new CloudRuntimeException("Can't find network element for " + Service.UserData.getName() + " provider needed for UserData update");
|
||||
}
|
||||
boolean result = element.saveUserData(network, nicProfile, vmProfile);
|
||||
if (!result) {
|
||||
s_logger.error("Failed to update userdata for vm " + vm + " and nic " + nic);
|
||||
}
|
||||
UserDataServiceProvider element = _networkModel.getUserDataUpdateProvider(network);
|
||||
if (element == null) {
|
||||
throw new CloudRuntimeException("Can't find network element for " + Service.UserData.getName() + " provider needed for UserData update");
|
||||
}
|
||||
boolean result = element.saveUserData(network, nicProfile, vmProfile);
|
||||
if (!result) {
|
||||
s_logger.error("Failed to update userdata for vm " + vm + " and nic " + nic);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -1957,11 +1958,11 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
CallContext ctx = CallContext.current();
|
||||
long vmId = cmd.getId();
|
||||
boolean expunge = cmd.getExpunge();
|
||||
|
||||
|
||||
if (!_accountMgr.isAdmin(ctx.getCallingAccount().getType()) && expunge) {
|
||||
throw new PermissionDeniedException("Parameter " + ApiConstants.EXPUNGE + " can be passed by Admin only");
|
||||
}
|
||||
|
||||
|
||||
UserVm destroyedVm = destroyVm(vmId);
|
||||
if (expunge) {
|
||||
UserVmVO vm = _vmDao.findById(vmId);
|
||||
|
|
@ -1969,7 +1970,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
throw new CloudRuntimeException("Failed to expunge vm " + destroyedVm);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return destroyedVm;
|
||||
}
|
||||
|
||||
|
|
@ -2103,7 +2104,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
throw new CloudRuntimeException("Failed to acquire lock on vm group id="
|
||||
+ groupFinal.getId() + " name=" + groupFinal.getName());
|
||||
}
|
||||
|
||||
|
||||
// Currently don't allow to assign a vm to more than one group
|
||||
if (_groupVMMapDao.listByInstanceId(userVmId) != null) {
|
||||
// Delete all mappings from group_vm_map table
|
||||
|
|
@ -2187,11 +2188,11 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
@Override
|
||||
@ActionEvent(eventType = EventTypes.EVENT_VM_CREATE, eventDescription = "deploying Vm", create = true)
|
||||
public UserVm createBasicSecurityGroupVirtualMachine(DataCenter zone, ServiceOffering serviceOffering, VirtualMachineTemplate template, List<Long> securityGroupIdList, Account owner,
|
||||
String hostName, String displayName, Long diskOfferingId, Long diskSize, String group,
|
||||
HypervisorType hypervisor, HTTPMethod httpmethod, String userData, String sshKeyPair,
|
||||
Map<Long, IpAddresses> requestedIps, IpAddresses defaultIps, Boolean displayVm, String keyboard,
|
||||
List<Long> affinityGroupIdList, Integer cpuSpeed, Integer memory, Integer cpuNumber, Long rootDiskSize)
|
||||
throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException, StorageUnavailableException, ResourceAllocationException {
|
||||
String hostName, String displayName, Long diskOfferingId, Long diskSize, String group,
|
||||
HypervisorType hypervisor, HTTPMethod httpmethod, String userData, String sshKeyPair,
|
||||
Map<Long, IpAddresses> requestedIps, IpAddresses defaultIps, Boolean displayVm, String keyboard,
|
||||
List<Long> affinityGroupIdList, Integer cpuSpeed, Integer memory, Integer cpuNumber, Long rootDiskSize)
|
||||
throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException, StorageUnavailableException, ResourceAllocationException {
|
||||
|
||||
Account caller = CallContext.current().getCallingAccount();
|
||||
List<NetworkVO> networkList = new ArrayList<NetworkVO>();
|
||||
|
|
@ -2241,18 +2242,18 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
return createVirtualMachine(zone, serviceOffering, template, hostName, displayName, owner, diskOfferingId,
|
||||
diskSize, networkList, securityGroupIdList, group, httpmethod, userData, sshKeyPair, hypervisor,
|
||||
caller, requestedIps, defaultIps, displayVm, keyboard, affinityGroupIdList, cpuSpeed , memory, cpuNumber, rootDiskSize);
|
||||
caller, requestedIps, defaultIps, displayVm, keyboard, affinityGroupIdList, cpuSpeed , memory, cpuNumber, rootDiskSize);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ActionEvent(eventType = EventTypes.EVENT_VM_CREATE, eventDescription = "deploying Vm", create = true)
|
||||
public UserVm createAdvancedSecurityGroupVirtualMachine(DataCenter zone, ServiceOffering serviceOffering, VirtualMachineTemplate template, List<Long> networkIdList,
|
||||
List<Long> securityGroupIdList, Account owner, String hostName, String displayName, Long diskOfferingId,
|
||||
Long diskSize, String group, HypervisorType hypervisor, HTTPMethod httpmethod, String userData,
|
||||
String sshKeyPair, Map<Long, IpAddresses> requestedIps, IpAddresses defaultIps, Boolean displayVm, String keyboard,
|
||||
List<Long> affinityGroupIdList, Integer cpuSpeed, Integer memory, Integer cpuNumber, Long rootDiskSize) throws InsufficientCapacityException, ConcurrentOperationException,
|
||||
ResourceUnavailableException, StorageUnavailableException, ResourceAllocationException {
|
||||
List<Long> securityGroupIdList, Account owner, String hostName, String displayName, Long diskOfferingId,
|
||||
Long diskSize, String group, HypervisorType hypervisor, HTTPMethod httpmethod, String userData,
|
||||
String sshKeyPair, Map<Long, IpAddresses> requestedIps, IpAddresses defaultIps, Boolean displayVm, String keyboard,
|
||||
List<Long> affinityGroupIdList, Integer cpuSpeed, Integer memory, Integer cpuNumber, Long rootDiskSize) throws InsufficientCapacityException, ConcurrentOperationException,
|
||||
ResourceUnavailableException, StorageUnavailableException, ResourceAllocationException {
|
||||
|
||||
Account caller = CallContext.current().getCallingAccount();
|
||||
List<NetworkVO> networkList = new ArrayList<NetworkVO>();
|
||||
|
|
@ -2359,16 +2360,16 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
return createVirtualMachine(zone, serviceOffering, template, hostName, displayName, owner, diskOfferingId,
|
||||
diskSize, networkList, securityGroupIdList, group, httpmethod, userData, sshKeyPair, hypervisor,
|
||||
caller, requestedIps, defaultIps, displayVm, keyboard, affinityGroupIdList, cpuSpeed, memory, cpuNumber, rootDiskSize);
|
||||
caller, requestedIps, defaultIps, displayVm, keyboard, affinityGroupIdList, cpuSpeed, memory, cpuNumber, rootDiskSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ActionEvent(eventType = EventTypes.EVENT_VM_CREATE, eventDescription = "deploying Vm", create = true)
|
||||
public UserVm createAdvancedVirtualMachine(DataCenter zone, ServiceOffering serviceOffering, VirtualMachineTemplate template, List<Long> networkIdList, Account owner, String hostName,
|
||||
String displayName, Long diskOfferingId, Long diskSize, String group, HypervisorType hypervisor,
|
||||
HTTPMethod httpmethod, String userData, String sshKeyPair, Map<Long, IpAddresses> requestedIps,
|
||||
IpAddresses defaultIps, Boolean displayvm, String keyboard, List<Long> affinityGroupIdList, Integer cpuSpeed, Integer memory, Integer cpuNumber, Long rootDiskSize)
|
||||
throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException, StorageUnavailableException, ResourceAllocationException {
|
||||
String displayName, Long diskOfferingId, Long diskSize, String group, HypervisorType hypervisor,
|
||||
HTTPMethod httpmethod, String userData, String sshKeyPair, Map<Long, IpAddresses> requestedIps,
|
||||
IpAddresses defaultIps, Boolean displayvm, String keyboard, List<Long> affinityGroupIdList, Integer cpuSpeed, Integer memory, Integer cpuNumber, Long rootDiskSize)
|
||||
throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException, StorageUnavailableException, ResourceAllocationException {
|
||||
|
||||
Account caller = CallContext.current().getCallingAccount();
|
||||
List<NetworkVO> networkList = new ArrayList<NetworkVO>();
|
||||
|
|
@ -2473,8 +2474,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
}
|
||||
|
||||
return createVirtualMachine(zone, serviceOffering, template, hostName, displayName, owner, diskOfferingId,
|
||||
diskSize, networkList, null, group, httpmethod, userData, sshKeyPair, hypervisor, caller, requestedIps,
|
||||
defaultIps, displayvm, keyboard, affinityGroupIdList, cpuSpeed, memory, cpuNumber, rootDiskSize);
|
||||
diskSize, networkList, null, group, httpmethod, userData, sshKeyPair, hypervisor, caller, requestedIps,
|
||||
defaultIps, displayvm, keyboard, affinityGroupIdList, cpuSpeed, memory, cpuNumber, rootDiskSize);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2487,9 +2488,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
@DB
|
||||
protected UserVm createVirtualMachine(DataCenter zone, ServiceOffering serviceOffering, VirtualMachineTemplate tmplt, String hostName, String displayName, Account owner, Long diskOfferingId,
|
||||
Long diskSize, List<NetworkVO> networkList, List<Long> securityGroupIdList, String group, HTTPMethod httpmethod,
|
||||
String userData, String sshKeyPair, HypervisorType hypervisor, Account caller, Map<Long, IpAddresses> requestedIps,
|
||||
IpAddresses defaultIps, Boolean isDisplayVmEnabled, String keyboard, List<Long> affinityGroupIdList, Integer cpuSpeed, Integer memory, Integer cpuNumber, Long rootDiskSize)
|
||||
Long diskSize, List<NetworkVO> networkList, List<Long> securityGroupIdList, String group, HTTPMethod httpmethod,
|
||||
String userData, String sshKeyPair, HypervisorType hypervisor, Account caller, Map<Long, IpAddresses> requestedIps,
|
||||
IpAddresses defaultIps, Boolean isDisplayVmEnabled, String keyboard, List<Long> affinityGroupIdList, Integer cpuSpeed, Integer memory, Integer cpuNumber, Long rootDiskSize)
|
||||
throws InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException, StorageUnavailableException, ResourceAllocationException {
|
||||
|
||||
_accountMgr.checkAccess(caller, null, true, owner);
|
||||
|
|
@ -2535,17 +2536,17 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
Long tmp = _templateDao.findById(template.getId()).getSize();
|
||||
long size = 0;
|
||||
if (tmp != null) {
|
||||
size = tmp;
|
||||
size = tmp;
|
||||
}
|
||||
if (diskOfferingId != null) {
|
||||
size += _diskOfferingDao.findById(diskOfferingId).getDiskSize();
|
||||
}
|
||||
if (!offering.isDynamic()) {
|
||||
resourceLimitCheck(owner, new Long(offering.getCpu()), new Long(offering.getRamSize()));
|
||||
}
|
||||
else {
|
||||
resourceLimitCheck(owner, new Long(cpuSpeed), new Long(memory));
|
||||
}
|
||||
if (!offering.isDynamic()) {
|
||||
resourceLimitCheck(owner, new Long(offering.getCpu()), new Long(offering.getRamSize()));
|
||||
}
|
||||
else {
|
||||
resourceLimitCheck(owner, new Long(cpuSpeed), new Long(memory));
|
||||
}
|
||||
_resourceLimitMgr.checkResourceLimit(owner, ResourceType.volume, (isIso
|
||||
|| diskOfferingId == null ? 1 : 2));
|
||||
_resourceLimitMgr.checkResourceLimit(owner, ResourceType.primary_storage, new Long (size));
|
||||
|
|
@ -2782,7 +2783,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
hostName = generateHostName(uuidName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (hostName != null) {
|
||||
// Check is hostName is RFC compliant
|
||||
checkNameForRFCCompliance(hostName);
|
||||
|
|
@ -2817,14 +2818,14 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
// * verify that there are no duplicates
|
||||
if (hostNames.contains(hostName)) {
|
||||
throw new InvalidParameterValueException("The vm with hostName " + hostName
|
||||
+ " already exists in the network domain: " + ntwkDomain + "; network="
|
||||
+ _networkModel.getNetwork(ntwkId));
|
||||
+ " already exists in the network domain: " + ntwkDomain + "; network="
|
||||
+ _networkModel.getNetwork(ntwkId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HypervisorType hypervisorType = null;
|
||||
if (template == null || template.getHypervisorType() == null
|
||||
if (template.getHypervisorType() == null
|
||||
|| template.getHypervisorType() == HypervisorType.None) {
|
||||
hypervisorType = hypervisor;
|
||||
} else {
|
||||
|
|
@ -2925,7 +2926,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
vm.setDetail("firmware", "efi");
|
||||
s_logger.info("guestOS is OSX : overwrite root disk controller to scsi, use smc and efi");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, String> details = template.getDetails();
|
||||
if ( details != null && !details.isEmpty() ) {
|
||||
|
|
@ -2950,33 +2951,33 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
rootDiskTags.add(offering.getTags());
|
||||
|
||||
if(isIso){
|
||||
VirtualMachineEntity vmEntity = _orchSrvc.createVirtualMachineFromScratch(vm.getUuid(), Long.toString(owner.getAccountId()), vm.getIsoId().toString(), hostName, displayName, hypervisor.name(), guestOSCategory.getName(), offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags, networkNicMap, plan);
|
||||
_orchSrvc.createVirtualMachineFromScratch(vm.getUuid(), Long.toString(owner.getAccountId()), vm.getIsoId().toString(), hostName, displayName, hypervisor.name(), guestOSCategory.getName(), offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags, networkNicMap, plan);
|
||||
}else {
|
||||
VirtualMachineEntity vmEntity = _orchSrvc.createVirtualMachine(vm.getUuid(), Long.toString(owner.getAccountId()), Long.toString(template.getId()), hostName, displayName, hypervisor.name(), offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags, networkNicMap, plan, rootDiskSize);
|
||||
_orchSrvc.createVirtualMachine(vm.getUuid(), Long.toString(owner.getAccountId()), Long.toString(template.getId()), hostName, displayName, hypervisor.name(), offering.getCpu(), offering.getSpeed(), offering.getRamSize(), diskSize, computeTags, rootDiskTags, networkNicMap, plan, rootDiskSize);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Successfully allocated DB entry for " + vm);
|
||||
}
|
||||
CallContext.current().setEventDetails("Vm Id: " + vm.getId());
|
||||
|
||||
if (!offering.isDynamic()) {
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, accountId, zone.getId(), vm.getId(),
|
||||
vm.getHostName(), offering.getId(), template.getId(), hypervisorType.toString(),
|
||||
VirtualMachine.class.getName(), vm.getUuid());
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, accountId, zone.getId(), vm.getId(),
|
||||
vm.getHostName(), offering.getId(), template.getId(), hypervisorType.toString(),
|
||||
VirtualMachine.class.getName(), vm.getUuid());
|
||||
}
|
||||
else {
|
||||
HashMap<String, String> vmdetailsMap = new HashMap<String, String>();
|
||||
for (UserVmDetailVO vmdetail :vmdetails) {
|
||||
vmdetailsMap.put(vmdetail.getName(), vmdetail.getValue());
|
||||
}
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, accountId, zone.getId(), vm.getId(),
|
||||
vm.getHostName(), offering.getId(), template.getId(), hypervisorType.toString(),
|
||||
VirtualMachine.class.getName(), vm.getUuid(), vmdetailsMap);
|
||||
HashMap<String, String> vmdetailsMap = new HashMap<String, String>();
|
||||
for (UserVmDetailVO vmdetail :vmdetails) {
|
||||
vmdetailsMap.put(vmdetail.getName(), vmdetail.getValue());
|
||||
}
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, accountId, zone.getId(), vm.getId(),
|
||||
vm.getHostName(), offering.getId(), template.getId(), hypervisorType.toString(),
|
||||
VirtualMachine.class.getName(), vm.getUuid(), vmdetailsMap);
|
||||
}
|
||||
|
||||
|
||||
//Update Resource Count for the given account
|
||||
resourceCountIncrement(accountId, new Long(offering.getCpu()),
|
||||
new Long(offering.getRamSize()));
|
||||
|
|
@ -3001,7 +3002,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
decodedUserData = Base64.decodeBase64(userData.getBytes());
|
||||
if (decodedUserData.length > MAX_HTTP_GET_LENGTH) {
|
||||
throw new InvalidParameterValueException(
|
||||
"User data is too long for GET request");
|
||||
"User data is too long for GET request");
|
||||
}
|
||||
} else if (httpmethod.equals(HTTPMethod.POST)) {
|
||||
if (userData.length() >= MAX_HTTP_POST_LENGTH) {
|
||||
|
|
@ -3011,7 +3012,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
decodedUserData = Base64.decodeBase64(userData.getBytes());
|
||||
if (decodedUserData.length > MAX_HTTP_POST_LENGTH) {
|
||||
throw new InvalidParameterValueException(
|
||||
"User data is too long for POST request");
|
||||
"User data is too long for POST request");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3099,17 +3100,17 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
@Override
|
||||
public boolean setupVmForPvlan(boolean add, Long hostId, NicProfile nic) {
|
||||
if (!nic.getBroadCastUri().getScheme().equals("pvlan")) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
String op = "add";
|
||||
if (!add) {
|
||||
// "delete" would remove all the rules(if using ovs) related to this vm
|
||||
op = "delete";
|
||||
// "delete" would remove all the rules(if using ovs) related to this vm
|
||||
op = "delete";
|
||||
}
|
||||
Network network = _networkDao.findById(nic.getNetworkId());
|
||||
Host host = _hostDao.findById(hostId);
|
||||
String networkTag = _networkModel.getNetworkTag(host.getHypervisorType(), network);
|
||||
PvlanSetupCommand cmd = PvlanSetupCommand.createVmSetup(op, nic.getBroadCastUri(), networkTag, nic.getMacAddress());
|
||||
PvlanSetupCommand cmd = PvlanSetupCommand.createVmSetup(op, nic.getBroadCastUri(), networkTag, nic.getMacAddress());
|
||||
Answer answer = null;
|
||||
try {
|
||||
answer = _agentMgr.send(hostId, cmd);
|
||||
|
|
@ -3123,7 +3124,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
boolean result = true;
|
||||
if (answer == null || !answer.getResult()) {
|
||||
result = false;
|
||||
result = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
@ -3146,10 +3147,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
List<VolumeVO> volumes = _volsDao.findByInstance(userVm.getId());
|
||||
VmDiskStatisticsVO diskstats = null;
|
||||
for (VolumeVO volume : volumes) {
|
||||
diskstats = _vmDiskStatsDao.findBy(userVm.getAccountId(), userVm.getDataCenterId(),userVm.getId(), volume.getId());
|
||||
diskstats = _vmDiskStatsDao.findBy(userVm.getAccountId(), userVm.getDataCenterId(),userVm.getId(), volume.getId());
|
||||
if (diskstats == null) {
|
||||
diskstats = new VmDiskStatisticsVO(userVm.getAccountId(), userVm.getDataCenterId(),userVm.getId(), volume.getId());
|
||||
_vmDiskStatsDao.persist(diskstats);
|
||||
diskstats = new VmDiskStatisticsVO(userVm.getAccountId(), userVm.getDataCenterId(),userVm.getId(), volume.getId());
|
||||
_vmDiskStatsDao.persist(diskstats);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3202,15 +3203,15 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
guestNetwork = network;
|
||||
// In vmware, we will be effecting pvlan settings in portgroups in StartCommand.
|
||||
if (profile.getHypervisorType() != HypervisorType.VMware) {
|
||||
if (nic.getBroadcastUri().getScheme().equals("pvlan")) {
|
||||
NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), 0, false, "pvlan-nic");
|
||||
if (!setupVmForPvlan(true, hostId, nicProfile)) {
|
||||
return false;
|
||||
}
|
||||
if (nic.getBroadcastUri().getScheme().equals("pvlan")) {
|
||||
NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), 0, false, "pvlan-nic");
|
||||
if (!setupVmForPvlan(true, hostId, nicProfile)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
boolean ipChanged = false;
|
||||
if (originalIp != null && !originalIp.equalsIgnoreCase(returnedIp)) {
|
||||
if (returnedIp != null && guestNic != null) {
|
||||
|
|
@ -3225,7 +3226,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
}
|
||||
}
|
||||
if (ipChanged) {
|
||||
DataCenterVO dc = _dcDao.findById(vm.getDataCenterId());
|
||||
_dcDao.findById(vm.getDataCenterId());
|
||||
UserVmVO userVm = _vmDao.findById(profile.getId());
|
||||
// dc.getDhcpProvider().equalsIgnoreCase(Provider.ExternalDhcpServer.getName())
|
||||
if (_ntwkSrvcDao.canProviderSupportServiceInNetwork(
|
||||
|
|
@ -3279,15 +3280,15 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
"unable to find a virtual machine with id " + vmId);
|
||||
}
|
||||
|
||||
UserVO user = _userDao.findById(userId);
|
||||
_userDao.findById(userId);
|
||||
boolean status = false;
|
||||
try {
|
||||
VirtualMachineEntity vmEntity = _orchSrvc.getVirtualMachine(vm.getUuid());
|
||||
status = vmEntity.stop(Long.toString(userId));
|
||||
if (status) {
|
||||
return _vmDao.findById(vmId);
|
||||
return _vmDao.findById(vmId);
|
||||
} else {
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
} catch (ResourceUnavailableException e) {
|
||||
throw new CloudRuntimeException(
|
||||
|
|
@ -3327,8 +3328,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
NetworkVO network = _networkDao.findById(nic.getNetworkId());
|
||||
if (network.getTrafficType() == TrafficType.Guest) {
|
||||
if (nic.getBroadcastUri() != null && nic.getBroadcastUri().getScheme().equals("pvlan")) {
|
||||
NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), 0, false, "pvlan-nic");
|
||||
setupVmForPvlan(false, vm.getHostId(), nicProfile);
|
||||
NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), 0, false, "pvlan-nic");
|
||||
setupVmForPvlan(false, vm.getHostId(), nicProfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3497,7 +3498,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
}
|
||||
|
||||
_accountMgr.checkAccess(caller, null, true, vm);
|
||||
User userCaller = _userDao.findById(userId);
|
||||
_userDao.findById(userId);
|
||||
|
||||
boolean status;
|
||||
State vmState = vm.getState();
|
||||
|
|
@ -3546,16 +3547,16 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
// support KVM only util 2013.06.25
|
||||
if (!userVm.getHypervisorType().equals(HypervisorType.KVM))
|
||||
return;
|
||||
s_logger.debug("Collect vm disk statistics from host before stopping Vm");
|
||||
long hostId = userVm.getHostId();
|
||||
List<String> vmNames = new ArrayList<String>();
|
||||
vmNames.add(userVm.getInstanceName());
|
||||
final HostVO host = _hostDao.findById(hostId);
|
||||
s_logger.debug("Collect vm disk statistics from host before stopping Vm");
|
||||
long hostId = userVm.getHostId();
|
||||
List<String> vmNames = new ArrayList<String>();
|
||||
vmNames.add(userVm.getInstanceName());
|
||||
final HostVO host = _hostDao.findById(hostId);
|
||||
|
||||
GetVmDiskStatsAnswer diskStatsAnswer = null;
|
||||
try {
|
||||
diskStatsAnswer = (GetVmDiskStatsAnswer) _agentMgr.easySend(hostId, new GetVmDiskStatsCommand(vmNames, host.getGuid(), host.getName()));
|
||||
} catch (Exception e) {
|
||||
GetVmDiskStatsAnswer diskStatsAnswer = null;
|
||||
try {
|
||||
diskStatsAnswer = (GetVmDiskStatsAnswer) _agentMgr.easySend(hostId, new GetVmDiskStatsCommand(vmNames, host.getGuid(), host.getName()));
|
||||
} catch (Exception e) {
|
||||
s_logger.warn("Error while collecting disk stats for vm: " + userVm.getHostName() + " from host: " + host.getName(), e);
|
||||
return;
|
||||
}
|
||||
|
|
@ -3575,83 +3576,83 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
List<VmDiskStatsEntry> vmDiskStats = vmDiskStatsByName.get(userVm.getInstanceName());
|
||||
if (vmDiskStats == null)
|
||||
return;
|
||||
|
||||
for (VmDiskStatsEntry vmDiskStat:vmDiskStats) {
|
||||
SearchCriteria<VolumeVO> sc_volume = _volsDao.createSearchCriteria();
|
||||
sc_volume.addAnd("path", SearchCriteria.Op.EQ, vmDiskStat.getPath());
|
||||
VolumeVO volume = _volsDao.search(sc_volume, null).get(0);
|
||||
VmDiskStatisticsVO previousVmDiskStats = _vmDiskStatsDao.findBy(userVm.getAccountId(), userVm.getDataCenterId(), userVm.getId(), volume.getId());
|
||||
VmDiskStatisticsVO vmDiskStat_lock = _vmDiskStatsDao.lock(userVm.getAccountId(), userVm.getDataCenterId(), userVm.getId(), volume.getId());
|
||||
|
||||
if ((vmDiskStat.getIORead() == 0) && (vmDiskStat.getIOWrite() == 0) && (vmDiskStat.getBytesRead() == 0) && (vmDiskStat.getBytesWrite() == 0)) {
|
||||
s_logger.debug("Read/Write of IO and Bytes are both 0. Not updating vm_disk_statistics");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (vmDiskStat_lock == null) {
|
||||
s_logger.warn("unable to find vm disk stats from host for account: " + userVm.getAccountId() + " with vmId: " + userVm.getId()+ " and volumeId:" + volume.getId());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (previousVmDiskStats != null
|
||||
&& ((previousVmDiskStats.getCurrentIORead() != vmDiskStat_lock.getCurrentIORead())
|
||||
|| ((previousVmDiskStats.getCurrentIOWrite() != vmDiskStat_lock.getCurrentIOWrite())
|
||||
|| (previousVmDiskStats.getCurrentBytesRead() != vmDiskStat_lock.getCurrentBytesRead())
|
||||
|| (previousVmDiskStats.getCurrentBytesWrite() != vmDiskStat_lock.getCurrentBytesWrite())))) {
|
||||
s_logger.debug("vm disk stats changed from the time GetVmDiskStatsCommand was sent. " +
|
||||
"Ignoring current answer. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" IO Read: " + vmDiskStat.getIORead() + " IO Write: " + vmDiskStat.getIOWrite() +
|
||||
" Bytes Read: " + vmDiskStat.getBytesRead() + " Bytes Write: " + vmDiskStat.getBytesWrite());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (vmDiskStat_lock.getCurrentIORead() > vmDiskStat.getIORead()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Read # of IO that's less than the last one. " +
|
||||
"Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" Reported: " + vmDiskStat.getIORead() + " Stored: " + vmDiskStat_lock.getCurrentIORead());
|
||||
}
|
||||
vmDiskStat_lock.setNetIORead(vmDiskStat_lock.getNetIORead() + vmDiskStat_lock.getCurrentIORead());
|
||||
}
|
||||
vmDiskStat_lock.setCurrentIORead(vmDiskStat.getIORead());
|
||||
if (vmDiskStat_lock.getCurrentIOWrite() > vmDiskStat.getIOWrite()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Write # of IO that's less than the last one. " +
|
||||
"Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" Reported: " + vmDiskStat.getIOWrite() + " Stored: " + vmDiskStat_lock.getCurrentIOWrite());
|
||||
}
|
||||
vmDiskStat_lock.setNetIOWrite(vmDiskStat_lock.getNetIOWrite() + vmDiskStat_lock.getCurrentIOWrite());
|
||||
}
|
||||
vmDiskStat_lock.setCurrentIOWrite(vmDiskStat.getIOWrite());
|
||||
if (vmDiskStat_lock.getCurrentBytesRead() > vmDiskStat.getBytesRead()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Read # of Bytes that's less than the last one. " +
|
||||
"Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" Reported: " + vmDiskStat.getBytesRead() + " Stored: " + vmDiskStat_lock.getCurrentBytesRead());
|
||||
}
|
||||
vmDiskStat_lock.setNetBytesRead(vmDiskStat_lock.getNetBytesRead() + vmDiskStat_lock.getCurrentBytesRead());
|
||||
}
|
||||
vmDiskStat_lock.setCurrentBytesRead(vmDiskStat.getBytesRead());
|
||||
if (vmDiskStat_lock.getCurrentBytesWrite() > vmDiskStat.getBytesWrite()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Write # of Bytes that's less than the last one. " +
|
||||
"Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" Reported: " + vmDiskStat.getBytesWrite() + " Stored: " + vmDiskStat_lock.getCurrentBytesWrite());
|
||||
}
|
||||
vmDiskStat_lock.setNetBytesWrite(vmDiskStat_lock.getNetBytesWrite() + vmDiskStat_lock.getCurrentBytesWrite());
|
||||
}
|
||||
vmDiskStat_lock.setCurrentBytesWrite(vmDiskStat.getBytesWrite());
|
||||
|
||||
if (! _dailyOrHourly) {
|
||||
//update agg bytes
|
||||
vmDiskStat_lock.setAggIORead(vmDiskStat_lock.getNetIORead() + vmDiskStat_lock.getCurrentIORead());
|
||||
vmDiskStat_lock.setAggIOWrite(vmDiskStat_lock.getNetIOWrite() + vmDiskStat_lock.getCurrentIOWrite());
|
||||
vmDiskStat_lock.setAggBytesRead(vmDiskStat_lock.getNetBytesRead() + vmDiskStat_lock.getCurrentBytesRead());
|
||||
vmDiskStat_lock.setAggBytesWrite(vmDiskStat_lock.getNetBytesWrite() + vmDiskStat_lock.getCurrentBytesWrite());
|
||||
}
|
||||
|
||||
_vmDiskStatsDao.update(vmDiskStat_lock.getId(), vmDiskStat_lock);
|
||||
}
|
||||
|
||||
for (VmDiskStatsEntry vmDiskStat:vmDiskStats) {
|
||||
SearchCriteria<VolumeVO> sc_volume = _volsDao.createSearchCriteria();
|
||||
sc_volume.addAnd("path", SearchCriteria.Op.EQ, vmDiskStat.getPath());
|
||||
VolumeVO volume = _volsDao.search(sc_volume, null).get(0);
|
||||
VmDiskStatisticsVO previousVmDiskStats = _vmDiskStatsDao.findBy(userVm.getAccountId(), userVm.getDataCenterId(), userVm.getId(), volume.getId());
|
||||
VmDiskStatisticsVO vmDiskStat_lock = _vmDiskStatsDao.lock(userVm.getAccountId(), userVm.getDataCenterId(), userVm.getId(), volume.getId());
|
||||
|
||||
if ((vmDiskStat.getIORead() == 0) && (vmDiskStat.getIOWrite() == 0) && (vmDiskStat.getBytesRead() == 0) && (vmDiskStat.getBytesWrite() == 0)) {
|
||||
s_logger.debug("Read/Write of IO and Bytes are both 0. Not updating vm_disk_statistics");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (vmDiskStat_lock == null) {
|
||||
s_logger.warn("unable to find vm disk stats from host for account: " + userVm.getAccountId() + " with vmId: " + userVm.getId()+ " and volumeId:" + volume.getId());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (previousVmDiskStats != null
|
||||
&& ((previousVmDiskStats.getCurrentIORead() != vmDiskStat_lock.getCurrentIORead())
|
||||
|| ((previousVmDiskStats.getCurrentIOWrite() != vmDiskStat_lock.getCurrentIOWrite())
|
||||
|| (previousVmDiskStats.getCurrentBytesRead() != vmDiskStat_lock.getCurrentBytesRead())
|
||||
|| (previousVmDiskStats.getCurrentBytesWrite() != vmDiskStat_lock.getCurrentBytesWrite())))) {
|
||||
s_logger.debug("vm disk stats changed from the time GetVmDiskStatsCommand was sent. " +
|
||||
"Ignoring current answer. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" IO Read: " + vmDiskStat.getIORead() + " IO Write: " + vmDiskStat.getIOWrite() +
|
||||
" Bytes Read: " + vmDiskStat.getBytesRead() + " Bytes Write: " + vmDiskStat.getBytesWrite());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (vmDiskStat_lock.getCurrentIORead() > vmDiskStat.getIORead()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Read # of IO that's less than the last one. " +
|
||||
"Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" Reported: " + vmDiskStat.getIORead() + " Stored: " + vmDiskStat_lock.getCurrentIORead());
|
||||
}
|
||||
vmDiskStat_lock.setNetIORead(vmDiskStat_lock.getNetIORead() + vmDiskStat_lock.getCurrentIORead());
|
||||
}
|
||||
vmDiskStat_lock.setCurrentIORead(vmDiskStat.getIORead());
|
||||
if (vmDiskStat_lock.getCurrentIOWrite() > vmDiskStat.getIOWrite()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Write # of IO that's less than the last one. " +
|
||||
"Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" Reported: " + vmDiskStat.getIOWrite() + " Stored: " + vmDiskStat_lock.getCurrentIOWrite());
|
||||
}
|
||||
vmDiskStat_lock.setNetIOWrite(vmDiskStat_lock.getNetIOWrite() + vmDiskStat_lock.getCurrentIOWrite());
|
||||
}
|
||||
vmDiskStat_lock.setCurrentIOWrite(vmDiskStat.getIOWrite());
|
||||
if (vmDiskStat_lock.getCurrentBytesRead() > vmDiskStat.getBytesRead()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Read # of Bytes that's less than the last one. " +
|
||||
"Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" Reported: " + vmDiskStat.getBytesRead() + " Stored: " + vmDiskStat_lock.getCurrentBytesRead());
|
||||
}
|
||||
vmDiskStat_lock.setNetBytesRead(vmDiskStat_lock.getNetBytesRead() + vmDiskStat_lock.getCurrentBytesRead());
|
||||
}
|
||||
vmDiskStat_lock.setCurrentBytesRead(vmDiskStat.getBytesRead());
|
||||
if (vmDiskStat_lock.getCurrentBytesWrite() > vmDiskStat.getBytesWrite()) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Write # of Bytes that's less than the last one. " +
|
||||
"Assuming something went wrong and persisting it. Host: " + host.getName() + " . VM: " + vmDiskStat.getVmName() +
|
||||
" Reported: " + vmDiskStat.getBytesWrite() + " Stored: " + vmDiskStat_lock.getCurrentBytesWrite());
|
||||
}
|
||||
vmDiskStat_lock.setNetBytesWrite(vmDiskStat_lock.getNetBytesWrite() + vmDiskStat_lock.getCurrentBytesWrite());
|
||||
}
|
||||
vmDiskStat_lock.setCurrentBytesWrite(vmDiskStat.getBytesWrite());
|
||||
|
||||
if (! _dailyOrHourly) {
|
||||
//update agg bytes
|
||||
vmDiskStat_lock.setAggIORead(vmDiskStat_lock.getNetIORead() + vmDiskStat_lock.getCurrentIORead());
|
||||
vmDiskStat_lock.setAggIOWrite(vmDiskStat_lock.getNetIOWrite() + vmDiskStat_lock.getCurrentIOWrite());
|
||||
vmDiskStat_lock.setAggBytesRead(vmDiskStat_lock.getNetBytesRead() + vmDiskStat_lock.getCurrentBytesRead());
|
||||
vmDiskStat_lock.setAggBytesWrite(vmDiskStat_lock.getNetBytesWrite() + vmDiskStat_lock.getCurrentBytesWrite());
|
||||
}
|
||||
|
||||
_vmDiskStatsDao.update(vmDiskStat_lock.getId(), vmDiskStat_lock);
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
|
|
@ -3691,7 +3692,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
boolean status;
|
||||
|
||||
status = expunge(vm, userId, caller);
|
||||
status = expunge(vm, userId, caller);
|
||||
if (status) {
|
||||
return _vmDao.findByIdIncludingRemoved(vmId);
|
||||
} else {
|
||||
|
|
@ -4063,7 +4064,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
checkHostsDedication(vm, srcHostId, destinationHost.getId());
|
||||
|
||||
// call to core process
|
||||
// call to core process
|
||||
DataCenterVO dcVO = _dcDao.findById(destinationHost.getDataCenterId());
|
||||
HostPodVO pod = _podDao.findById(destinationHost.getPodId());
|
||||
Cluster cluster = _clusterDao.findById(destinationHost.getClusterId());
|
||||
|
|
@ -4205,7 +4206,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
if (!((destPlanner.getDeploymentPlanner() != null && destPlanner.getDeploymentPlanner().equals("ImplicitDedicationPlanner")) &&
|
||||
vmsDest.getAccountId()==accountOfVm)) {
|
||||
msg = "VM of account " + accountOfVm + " with preffered implicit deployment planner being migrated to host " + destHost.getName() +
|
||||
" not having all vms implicitly dedicated to account " + accountOfVm;
|
||||
" not having all vms implicitly dedicated to account " + accountOfVm;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4358,11 +4359,11 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
// Check if the source and destination hosts are of the same type and support storage motion.
|
||||
if (!(srcHost.getHypervisorType().equals(destinationHost.getHypervisorType()) &&
|
||||
srcHost.getHypervisorVersion().equals(destinationHost.getHypervisorVersion()))) {
|
||||
srcHost.getHypervisorVersion().equals(destinationHost.getHypervisorVersion()))) {
|
||||
throw new CloudRuntimeException("The source and destination hosts are not of the same type and version. " +
|
||||
"Source hypervisor type and version: " + srcHost.getHypervisorType().toString() + " " +
|
||||
srcHost.getHypervisorVersion() + ", Destination hypervisor type and version: " +
|
||||
destinationHost.getHypervisorType().toString() + " " + destinationHost.getHypervisorVersion());
|
||||
"Source hypervisor type and version: " + srcHost.getHypervisorType().toString() + " " +
|
||||
srcHost.getHypervisorVersion() + ", Destination hypervisor type and version: " +
|
||||
destinationHost.getHypervisorType().toString() + " " + destinationHost.getHypervisorVersion());
|
||||
}
|
||||
|
||||
HypervisorCapabilitiesVO capabilities = _hypervisorCapabilitiesDao.findByHypervisorTypeAndVersion(
|
||||
|
|
@ -4432,7 +4433,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
_itMgr.migrateWithStorage(vm.getUuid(), srcHostId, destinationHost.getId(), volToPoolObjectMap);
|
||||
return _vmDao.findById(vm.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@DB
|
||||
@Override
|
||||
|
|
@ -4580,16 +4581,16 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_DESTROY, vm.getAccountId(), vm.getDataCenterId(), vm.getId(),
|
||||
vm.getHostName(), vm.getServiceOfferingId(), vm.getTemplateId(), vm.getHypervisorType().toString(),
|
||||
VirtualMachine.class.getName(), vm.getUuid());
|
||||
|
||||
|
||||
// update resource counts for old account
|
||||
resourceCountDecrement(oldAccount.getAccountId(), new Long(offering.getCpu()),
|
||||
new Long(offering.getRamSize()));
|
||||
|
||||
|
||||
// OWNERSHIP STEP 1: update the vm owner
|
||||
vm.setAccountId(newAccount.getAccountId());
|
||||
vm.setDomainId(cmd.getDomainId());
|
||||
_vmDao.persist(vm);
|
||||
|
||||
|
||||
// OS 2: update volume
|
||||
for (VolumeVO volume : volumes) {
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, volume.getAccountId(),
|
||||
|
|
@ -4613,10 +4614,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
_snapshotDao.remove(snapshot.getId());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//update resource count of new account
|
||||
resourceCountIncrement(newAccount.getAccountId(), new Long(offering.getCpu()), new Long(offering.getRamSize()));
|
||||
|
||||
|
||||
//generate usage events to account for this change
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(),
|
||||
vm.getHostName(), vm.getServiceOfferingId(), vm.getTemplateId(), vm.getHypervisorType().toString(),
|
||||
|
|
@ -4867,7 +4868,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
|
||||
Long userId = caller.getId();
|
||||
Account owner = _accountDao.findById(vm.getAccountId());
|
||||
UserVO user = _userDao.findById(userId);
|
||||
_userDao.findById(userId);
|
||||
long vmId = vm.getId();
|
||||
boolean needRestart = false;
|
||||
|
||||
|
|
@ -4908,7 +4909,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
Long templateId = root.getTemplateId();
|
||||
boolean isISO = false;
|
||||
if(templateId == null) {
|
||||
// Assuming that for a vm deployed using ISO, template ID is set to NULL
|
||||
// Assuming that for a vm deployed using ISO, template ID is set to NULL
|
||||
isISO = true;
|
||||
templateId = vm.getIsoId();
|
||||
}
|
||||
|
|
@ -4963,10 +4964,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
vm.setTemplateId(newTemplateId);
|
||||
_vmDao.update(vmId, vm);
|
||||
} else {
|
||||
newVol = volumeMgr.allocateDuplicateVolume(root, newTemplateId);
|
||||
vm.setGuestOSId(template.getGuestOSId());
|
||||
vm.setTemplateId(newTemplateId);
|
||||
_vmDao.update(vmId, vm);
|
||||
newVol = volumeMgr.allocateDuplicateVolume(root, newTemplateId);
|
||||
vm.setGuestOSId(template.getGuestOSId());
|
||||
vm.setTemplateId(newTemplateId);
|
||||
_vmDao.update(vmId, vm);
|
||||
}
|
||||
} else {
|
||||
newVol = volumeMgr.allocateDuplicateVolume(root, null);
|
||||
|
|
@ -5032,7 +5033,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||
if (vm != null && vm.getState() == State.Stopping)
|
||||
collectVmDiskStatistics(vm);
|
||||
}
|
||||
|
||||
|
||||
private void encryptAndStorePassword(UserVmVO vm, String password) {
|
||||
String sshPublicKey = vm.getDetail("SSH.PublicKey");
|
||||
if (sshPublicKey != null && !sshPublicKey.equals("")
|
||||
|
|
|
|||
Loading…
Reference in New Issue