Prevent NPE on reboot stopped VM and startVM output with null displayname (#6397)

* Prevent NPE on reboot stopped VM

* Use VM UUID instead of VM ID

* Apply suggestion

* Refactor and fix start VM output

* Use format instead of concatenation
This commit is contained in:
Nicolas Vazquez 2022-05-20 11:31:47 -03:00 committed by GitHub
parent 006473ca19
commit b62b5c96e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 3 deletions

View File

@ -28,6 +28,7 @@ import javax.persistence.Table;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.uservm.UserVm;
import org.apache.commons.lang3.StringUtils;
@Entity
@Table(name = "user_vm")
@ -141,4 +142,8 @@ public class UserVmVO extends VMInstanceVO implements UserVm {
public String getName() {
return instanceName;
}
public String getDisplayNameOrHostName() {
return StringUtils.isNotBlank(displayName) ? displayName : getHostName();
}
}

View File

@ -127,7 +127,7 @@ public class UserVmJoinDaoImpl extends GenericDaoBaseWithTagInformation<UserVmJo
userVmResponse.setName(userVm.getName());
if (userVm.getDisplayName() != null) {
userVmResponse.setDisplayName(userVm.getDisplayName());
userVmResponse.setDisplayName(userVm.getDisplayName());
} else {
userVmResponse.setDisplayName(userVm.getName());
}

View File

@ -3130,6 +3130,11 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
throw new InvalidParameterValueException("Unable to find a virtual machine with id " + vmId);
}
if (vmInstance.getState() != State.Running) {
throw new InvalidParameterValueException(String.format("The VM %s (%s) is not running, unable to reboot it",
vmInstance.getUuid(), vmInstance.getDisplayNameOrHostName()));
}
_accountMgr.checkAccess(caller, null, true, vmInstance);
checkIfHostOfVMIsInPrepareForMaintenanceState(vmInstance.getHostId(), vmId, "Reboot");
@ -5119,8 +5124,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
throw new InvalidParameterValueException("unable to find a virtual machine with id " + vmId);
}
if (vm.getState()== State.Running) {
throw new InvalidParameterValueException("The virtual machine "+ vm.getUuid()+ " ("+ vm.getDisplayName()+ ") is already running");
if (vm.getState() == State.Running) {
throw new InvalidParameterValueException(String.format("The virtual machine %s (%s) is already running",
vm.getUuid(), vm.getDisplayNameOrHostName()));
}
_accountMgr.checkAccess(callerAccount, null, true, vm);