diff --git a/server/src/com/cloud/network/StorageNetworkManager.java b/server/src/com/cloud/network/StorageNetworkManager.java index 7d8354f0286..c57c021d6d2 100755 --- a/server/src/com/cloud/network/StorageNetworkManager.java +++ b/server/src/com/cloud/network/StorageNetworkManager.java @@ -11,7 +11,7 @@ public interface StorageNetworkManager extends Manager { void releaseIpAddress(String ip); - boolean isStorageIpRangeAvailable(); + boolean isStorageIpRangeAvailable(long zoneId); List getSSVMWithNoStorageNetwork(long zoneId); diff --git a/server/src/com/cloud/network/StorageNetworkManagerImpl.java b/server/src/com/cloud/network/StorageNetworkManagerImpl.java index b8cdaff84ca..69198e482de 100755 --- a/server/src/com/cloud/network/StorageNetworkManagerImpl.java +++ b/server/src/com/cloud/network/StorageNetworkManagerImpl.java @@ -24,6 +24,7 @@ import com.cloud.dc.dao.StorageNetworkIpAddressDao; import com.cloud.dc.dao.StorageNetworkIpRangeDao; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.host.HostVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.NetworkDao; import com.cloud.utils.Pair; @@ -342,8 +343,11 @@ public class StorageNetworkManagerImpl implements StorageNetworkManager, Storage } @Override - public boolean isStorageIpRangeAvailable() { - return _sNwIpRangeDao.countRanges() > 0; + public boolean isStorageIpRangeAvailable(long zoneId) { + SearchCriteriaService sc = SearchCriteria2.create(StorageNetworkIpRangeVO.class); + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, zoneId); + List entries = sc.list(); + return entries.size() > 0; } @Override diff --git a/server/src/com/cloud/network/guru/StorageNetworkGuru.java b/server/src/com/cloud/network/guru/StorageNetworkGuru.java index 197abe4a90a..347343029e8 100755 --- a/server/src/com/cloud/network/guru/StorageNetworkGuru.java +++ b/server/src/com/cloud/network/guru/StorageNetworkGuru.java @@ -19,6 +19,7 @@ import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; import com.cloud.network.StorageNetworkManager; +import com.cloud.network.dao.NetworkDao; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; import com.cloud.utils.component.AdapterBase; @@ -35,6 +36,7 @@ import com.cloud.vm.Nic.ReservationStrategy; public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGuru { private static final Logger s_logger = Logger.getLogger(StorageNetworkGuru.class); @Inject StorageNetworkManager _sNwMgr; + @Inject NetworkDao _nwDao; protected StorageNetworkGuru() { super(); @@ -81,7 +83,7 @@ public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGu public Network implement(Network network, NetworkOffering offering, DeployDestination destination, ReservationContext context) throws InsufficientVirtualNetworkCapcityException { assert network.getTrafficType() == TrafficType.Storage : "Why are you sending this configuration to me " + network; - if (!_sNwMgr.isStorageIpRangeAvailable()) { + if (!_sNwMgr.isStorageIpRangeAvailable(destination.getDataCenter().getId())) { return super.implement(network, offering, destination, context); } return network; @@ -91,7 +93,7 @@ public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGu public NicProfile allocate(Network network, NicProfile nic, VirtualMachineProfile vm) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException { assert network.getTrafficType() == TrafficType.Storage : "Well, I can't take care of this config now can I? " + network; - if (!_sNwMgr.isStorageIpRangeAvailable()) { + if (!_sNwMgr.isStorageIpRangeAvailable(network.getDataCenterId())) { return super.allocate(network, nic, vm); } @@ -101,7 +103,7 @@ public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGu @Override public void reserve(NicProfile nic, Network network, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException { - if (!_sNwMgr.isStorageIpRangeAvailable()) { + if (!_sNwMgr.isStorageIpRangeAvailable(dest.getDataCenter().getId())) { super.reserve(nic, network, vm, dest, context); return; } @@ -132,7 +134,8 @@ public class StorageNetworkGuru extends PodBasedNetworkGuru implements NetworkGu @Override public boolean release(NicProfile nic, VirtualMachineProfile vm, String reservationId) { - if (!_sNwMgr.isStorageIpRangeAvailable()) { + Network nw = _nwDao.findById(nic.getNetworkId()); + if (!_sNwMgr.isStorageIpRangeAvailable(nw.getDataCenterId())) { return super.release(nic, vm, reservationId); }