This is an automated email from the ASF dual-hosted git repository.

weizhou pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.20 by this push:
     new cd69f2ce16d server: Fix NPE during VM IP fetch for shared networks 
(#11389)
cd69f2ce16d is described below

commit cd69f2ce16d4524e2068c3be508dbf5352221316
Author: Suresh Kumar Anaparti <[email protected]>
AuthorDate: Mon Sep 15 13:44:06 2025 +0530

    server: Fix NPE during VM IP fetch for shared networks (#11389)
    
    * Fix NPE during VM IP fetch for shared networks
    
    * PR 11389: add missing import org.apache.commons.lang3.ObjectUtils
    
    ---------
    
    Co-authored-by: Wei Zhou <[email protected]>
---
 server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java 
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index b8710943164..794d28c7adc 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -139,6 +139,7 @@ import org.apache.cloudstack.vm.UnmanagedVMsManager;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang.math.NumberUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -658,7 +659,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
             "Wait Interval (in seconds) for shared network vm dhcp ip addr 
fetch for next iteration ", true);
 
     private static final ConfigKey<Integer> VmIpFetchTrialMax = new 
ConfigKey<Integer>("Advanced", Integer.class, "externaldhcp.vmip.max.retry", 
"10",
-            "The max number of retrieval times for shared entwork vm dhcp ip 
fetch, in case of failures", true);
+            "The max number of retrieval times for shared network vm dhcp ip 
fetch, in case of failures", true);
 
     private static final ConfigKey<Integer> VmIpFetchThreadPoolMax = new 
ConfigKey<Integer>("Advanced", Integer.class, 
"externaldhcp.vmipFetch.threadPool.max", "10",
             "number of threads for fetching vms ip address", true);
@@ -2674,7 +2675,7 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
 
                             if (vmIdAndCount.getRetrievalCount() <= 0) {
                                 vmIdCountMap.remove(nicId);
-                                logger.debug("Vm " + vmId +" nic "+nicId + " 
count is zero .. removing vm nic from map ");
+                                logger.debug("Vm {} nic {} count is zero .. 
removing vm nic from map ", vmId, nicId);
 
                                 
ActionEventUtils.onActionEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM,
                                         Domain.ROOT_DOMAIN, 
EventTypes.EVENT_NETWORK_EXTERNAL_DHCP_VM_IPFETCH,
@@ -2683,12 +2684,15 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
                                 continue;
                             }
 
-
                             UserVm userVm = _vmDao.findById(vmId);
                             VMInstanceVO vmInstance = 
_vmInstanceDao.findById(vmId);
                             NicVO nicVo = _nicDao.findById(nicId);
-                            NetworkVO network = 
_networkDao.findById(nicVo.getNetworkId());
+                            if (ObjectUtils.anyNull(userVm, vmInstance, 
nicVo)) {
+                                logger.warn("Couldn't fetch ip addr, Vm {} or 
nic {} doesn't exists", vmId, nicId);
+                                continue;
+                            }
 
+                            NetworkVO network = 
_networkDao.findById(nicVo.getNetworkId());
                             VirtualMachineProfile vmProfile = new 
VirtualMachineProfileImpl(userVm);
                             VirtualMachine vm = vmProfile.getVirtualMachine();
                             boolean isWindows = 
_guestOSCategoryDao.findById(_guestOSDao.findById(vm.getGuestOSId()).getCategoryId()).getName().equalsIgnoreCase("Windows");

Reply via email to