diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java index de68e1e30b1..28cd0278620 100644 --- a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java +++ b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDao.java @@ -48,4 +48,6 @@ public interface DataCenterVnetDao extends GenericDao { public int countVnetsDedicatedToAccount(long dcId, long accountId); List listVnetsByPhysicalNetworkAndDataCenter(long dcId, long physicalNetworkId); + + int countAllocatedVnets(long physicalNetworkId); } diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java index 3ac2729853b..d3a2409dc96 100755 --- a/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java +++ b/engine/schema/src/com/cloud/dc/dao/DataCenterVnetDaoImpl.java @@ -74,6 +74,12 @@ public class DataCenterVnetDaoImpl extends GenericDaoBase sc = DcSearchAllocated.create(); + sc.setParameters("physicalNetworkId", physicalNetworkId); + return listBy(sc).size(); + } public List listAllocatedVnetsInRange(long dcId, long physicalNetworkId, Integer start, Integer end) { SearchCriteria sc = DcSearchAllocatedInRange.create(); sc.setParameters("dc",dcId); diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index 39663e1c1f0..f8bdb4e4515 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -2713,6 +2713,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { if (vnetRanges.size() == 0) { //this implies remove all vlans. removeVnets.addAll(vnetsInDb); + int allocated_vnets = _datacneter_vnet.countAllocatedVnets(network.getId()); + if (allocated_vnets > 0) { + throw new InvalidParameterValueException("physicalnetwork "+ network.getId() + " has "+ allocated_vnets + " vnets in use"); + } return removeVnets; } for (Pairvlan : vnetRanges) { @@ -2735,7 +2739,8 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { _datacneter_vnet.lockRange(network.getDataCenterId(), network.getId(), start, end); List result = _datacneter_vnet.listAllocatedVnetsInRange(network.getDataCenterId(), network.getId(), start, end); if (!result.isEmpty()){ - throw new InvalidParameterValueException("Some of the vnets from this range are allocated, can only remove a range which has no allocated vnets"); + throw new InvalidParameterValueException("physicalnetwork "+ network.getId() + " has allocated vnets in the range "+ start+"-"+end); + } // If the range is partially dedicated to an account fail the request List maps = _accountGuestVlanMapDao.listAccountGuestVlanMapsByPhysicalNetwork(network.getId());