From d47e2733299a77f0e3aa90c0eb23da06e1efd376 Mon Sep 17 00:00:00 2001 From: slavkap <51903378+slavkap@users.noreply.github.com> Date: Fri, 21 May 2021 12:49:04 +0300 Subject: [PATCH] server: Prevent NPE if hypervisor's capabilities are null (#5029) If the hypervisor's capabilities are null, CloudRuntimeException will be thrown; Format the error message. --- .../java/com/cloud/vm/UserVmManagerImpl.java | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 0784d50a60e..edbc458d523 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -6201,22 +6201,16 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir HypervisorCapabilitiesVO capabilities = _hypervisorCapabilitiesDao.findByHypervisorTypeAndVersion(srcHost.getHypervisorType(), srcHost.getHypervisorVersion()); - if (capabilities == null && HypervisorType.KVM.equals(srcHost.getHypervisorType())) { + if (capabilities == null) { + if (!HypervisorType.KVM.equals(srcHost.getHypervisorType())) { + throw new CloudRuntimeException(String.format("Cannot migrate VM with storage, as the capabilities are not found for the hypervisor %s with version %s", srcHost.getHypervisorType(), srcHost.getHypervisorVersion())); + } List lstHypervisorCapabilities = _hypervisorCapabilitiesDao.listAllByHypervisorType(HypervisorType.KVM); - if (lstHypervisorCapabilities != null) { - for (HypervisorCapabilitiesVO hypervisorCapabilities : lstHypervisorCapabilities) { - if (hypervisorCapabilities.isStorageMotionSupported()) { - capabilities = hypervisorCapabilities; - - break; - } - } - } - } - - if (!capabilities.isStorageMotionSupported()) { - throw new CloudRuntimeException("Migration with storage isn't supported on hypervisor " + srcHost.getHypervisorType() + " of version " + srcHost.getHypervisorVersion()); + capabilities = lstHypervisorCapabilities.stream().filter(hvCapabilities -> hvCapabilities.isStorageMotionSupported()).findAny() + .orElseThrow(() -> new CloudRuntimeException(String.format("Cannot migrate VM with storage, as the capabilities are not found for the hypervisor %s with version %s", srcHost.getHypervisorType(), srcHost.getHypervisorVersion()))); + } else if (!capabilities.isStorageMotionSupported()) { + throw new CloudRuntimeException(String.format("Migration with storage isn't supported on hypervisor %s of version %s", srcHost.getHypervisorType(), srcHost.getHypervisorVersion())); } // Check if destination host is up.