You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2019/08/15 08:06:13 UTC
[cloudstack] branch master updated: server: Prevent NullPointer on
a network with removed IP ranges/"VLANs" (#3551)
This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push:
new d7aa0a2 server: Prevent NullPointer on a network with removed IP ranges/"VLANs" (#3551)
d7aa0a2 is described below
commit d7aa0a2718381fcf57fc1f9df8296a4478d31d00
Author: Gabriel Beims Bräscher <ga...@pcextreme.nl>
AuthorDate: Thu Aug 15 05:05:58 2019 -0300
server: Prevent NullPointer on a network with removed IP ranges/"VLANs" (#3551)
When a network IP range is removed, the "vlan" stays mapped on pod_vlan_map; therefore, the method that lists the VLANs by pod id will return null VLANS.
This PR adds proper verifications to avoid null pointer exception when deploying VRs on a pod with removed VLANs. The exception was caused on getPlaceholderNicForRouter.
---
.../schema/src/main/java/com/cloud/dc/dao/VlanDaoImpl.java | 11 ++++-------
.../com/cloud/configuration/ConfigurationManagerImpl.java | 14 ++++++++++++--
2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/engine/schema/src/main/java/com/cloud/dc/dao/VlanDaoImpl.java b/engine/schema/src/main/java/com/cloud/dc/dao/VlanDaoImpl.java
index 2737beb..7b3ca13 100644
--- a/engine/schema/src/main/java/com/cloud/dc/dao/VlanDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/dc/dao/VlanDaoImpl.java
@@ -167,7 +167,10 @@ public class VlanDaoImpl extends GenericDaoBase<VlanVO, Long> implements VlanDao
List<PodVlanMapVO> vlanMaps = _podVlanMapDao.listPodVlanMapsByPod(podId);
List<VlanVO> result = new ArrayList<VlanVO>();
for (PodVlanMapVO pvmvo : vlanMaps) {
- result.add(findById(pvmvo.getVlanDbId()));
+ VlanVO vlanByPodId = findById(pvmvo.getVlanDbId());
+ if (vlanByPodId != null) {
+ result.add(vlanByPodId);
+ }
}
return result;
}
@@ -315,12 +318,6 @@ public class VlanDaoImpl extends GenericDaoBase<VlanVO, Long> implements VlanDao
}
return null;
-// String ipAddress = _ipAddressDao.assignIpAddress(accountId, domainId, vlan.getId(), false).getAddress();
-// if (ipAddress == null) {
-// return null;
-// }
-// return new Pair<String, VlanVO>(ipAddress, vlan);
-
}
@Override
diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index 288c5df..61f828b 100755
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -266,7 +266,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
@Inject
DomainVlanMapDao _domainVlanMapDao;
@Inject
- PodVlanMapDao _podVlanMapDao;
+ PodVlanMapDao podVlanMapDao;
@Inject
DataCenterDao _zoneDao;
@Inject
@@ -3950,7 +3950,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
} else if (podId != null) {
// This VLAN is pod-wide, so create a PodVlanMapVO entry
final PodVlanMapVO podVlanMapVO = new PodVlanMapVO(podId, vlan.getId());
- _podVlanMapDao.persist(podVlanMapVO);
+ podVlanMapDao.persist(podVlanMapVO);
}
return vlan;
}
@@ -4046,7 +4046,17 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
@Override
public void doInTransactionWithoutResult(final TransactionStatus status) {
_publicIpAddressDao.deletePublicIPRange(vlanDbId);
+ s_logger.debug(String.format("Delete Public IP Range (from user_ip_address, where vlan_db_d=%s)", vlanDbId));
+
_vlanDao.remove(vlanDbId);
+ s_logger.debug(String.format("Mark vlan as Remove vlan (vlan_db_id=%s)", vlanDbId));
+
+ SearchBuilder<PodVlanMapVO> sb = podVlanMapDao.createSearchBuilder();
+ sb.and("vlan_db_id", sb.entity().getVlanDbId(), SearchCriteria.Op.EQ);
+ SearchCriteria<PodVlanMapVO> sc = sb.create();
+ sc.setParameters("vlan_db_id", vlanDbId);
+ podVlanMapDao.remove(sc);
+ s_logger.debug(String.format("Delete vlan_db_id=%s in pod_vlan_map", vlanDbId));
}
});