Skip to content

Commit b62b5c9

Browse files
authored
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
1 parent 006473c commit b62b5c9

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

engine/schema/src/main/java/com/cloud/vm/UserVmVO.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import com.cloud.hypervisor.Hypervisor.HypervisorType;
3030
import com.cloud.uservm.UserVm;
31+
import org.apache.commons.lang3.StringUtils;
3132

3233
@Entity
3334
@Table(name = "user_vm")
@@ -141,4 +142,8 @@ public void setUserVmType(String userVmType) {
141142
public String getName() {
142143
return instanceName;
143144
}
145+
146+
public String getDisplayNameOrHostName() {
147+
return StringUtils.isNotBlank(displayName) ? displayName : getHostName();
148+
}
144149
}

server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public UserVmResponse newUserVmResponse(ResponseView view, String objectName, Us
127127
userVmResponse.setName(userVm.getName());
128128

129129
if (userVm.getDisplayName() != null) {
130-
userVmResponse.setDisplayName(userVm.getDisplayName());
130+
userVmResponse.setDisplayName(userVm.getDisplayName());
131131
} else {
132132
userVmResponse.setDisplayName(userVm.getName());
133133
}

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3130,6 +3130,11 @@ public UserVm rebootVirtualMachine(RebootVMCmd cmd) throws InsufficientCapacityE
31303130
throw new InvalidParameterValueException("Unable to find a virtual machine with id " + vmId);
31313131
}
31323132

3133+
if (vmInstance.getState() != State.Running) {
3134+
throw new InvalidParameterValueException(String.format("The VM %s (%s) is not running, unable to reboot it",
3135+
vmInstance.getUuid(), vmInstance.getDisplayNameOrHostName()));
3136+
}
3137+
31333138
_accountMgr.checkAccess(caller, null, true, vmInstance);
31343139

31353140
checkIfHostOfVMIsInPrepareForMaintenanceState(vmInstance.getHostId(), vmId, "Reboot");
@@ -5119,8 +5124,9 @@ public Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> startVirtualMach
51195124
throw new InvalidParameterValueException("unable to find a virtual machine with id " + vmId);
51205125
}
51215126

5122-
if (vm.getState()== State.Running) {
5123-
throw new InvalidParameterValueException("The virtual machine "+ vm.getUuid()+ " ("+ vm.getDisplayName()+ ") is already running");
5127+
if (vm.getState() == State.Running) {
5128+
throw new InvalidParameterValueException(String.format("The virtual machine %s (%s) is already running",
5129+
vm.getUuid(), vm.getDisplayNameOrHostName()));
51245130
}
51255131

51265132
_accountMgr.checkAccess(callerAccount, null, true, vm);

0 commit comments

Comments
 (0)