From 9b7a8ab888f5d4177e0096ab5eecf1d7c466774f Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Tue, 10 Mar 2026 15:40:53 +0530 Subject: [PATCH 1/2] Fix NPE during VM setup for pvlan --- .../main/java/com/cloud/vm/UserVmManagerImpl.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 49761905f004..3031e0d889df 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -5405,7 +5405,12 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl @Override public boolean setupVmForPvlan(boolean add, Long hostId, NicProfile nic) { - if (!nic.getBroadCastUri().getScheme().equals("pvlan")) { + if (nic == null || nic.getBroadCastUri() == null) { + return false; + } + + String scheme = nic.getBroadCastUri().getScheme(); + if (!"pvlan".equals(scheme)) { return false; } String op = "add"; @@ -5415,9 +5420,14 @@ public boolean setupVmForPvlan(boolean add, Long hostId, NicProfile nic) { } Network network = _networkDao.findById(nic.getNetworkId()); Host host = _hostDao.findById(hostId); + if (host == null) { + logger.warn("Host with id {} doesn't exist", hostId); + return false; + } + String networkTag = _networkModel.getNetworkTag(host.getHypervisorType(), network); PvlanSetupCommand cmd = PvlanSetupCommand.createVmSetup(op, nic.getBroadCastUri(), networkTag, nic.getMacAddress()); - Answer answer = null; + Answer answer; try { answer = _agentMgr.send(hostId, cmd); } catch (OperationTimedoutException e) { From ba8fb7bb9199ba3cc49911d64485956a4ef97293 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Wed, 11 Mar 2026 14:36:47 +0530 Subject: [PATCH 2/2] review comments --- .../java/com/cloud/vm/UserVmManagerImpl.java | 16 ++++++++++++---- 1 file changed, 12 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 3031e0d889df..efd42ef63af2 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -5405,12 +5405,19 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl @Override public boolean setupVmForPvlan(boolean add, Long hostId, NicProfile nic) { - if (nic == null || nic.getBroadCastUri() == null) { + if (nic == null) { + logger.warn("Skipping PVLAN setup on host {} because NIC profile is null", hostId); + return false; + } + + if (nic.getBroadCastUri() == null) { + logger.debug("Skipping PVLAN setup on host {} for NIC {} because broadcast URI is null", hostId, nic); return false; } String scheme = nic.getBroadCastUri().getScheme(); - if (!"pvlan".equals(scheme)) { + if (!"pvlan".equalsIgnoreCase(scheme)) { + logger.debug("Skipping PVLAN setup on host {} for NIC {} because broadcast URI scheme is {}", hostId, nic, scheme); return false; } String op = "add"; @@ -5418,13 +5425,14 @@ public boolean setupVmForPvlan(boolean add, Long hostId, NicProfile nic) { // "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); if (host == null) { - logger.warn("Host with id {} doesn't exist", hostId); + logger.warn("Host with id {} does not exist", hostId); return false; } + Network network = _networkDao.findById(nic.getNetworkId()); String networkTag = _networkModel.getNetworkTag(host.getHypervisorType(), network); PvlanSetupCommand cmd = PvlanSetupCommand.createVmSetup(op, nic.getBroadCastUri(), networkTag, nic.getMacAddress()); Answer answer;